home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Developer Essentials / Technical Docs / Inside Macintosh / New Inside Mac - draft / Imaging / Imaging
Encoding:
Text File  |  1992-01-14  |  567.9 KB  |  1,836 lines  |  [ONLN/HLX2]

  1. Inside Macintosh:
  2. Imaging
  3.     Apple Computer, Inc. 
  4. © 1991, Apple Computer, Inc.
  5. All rights reserved.
  6. Printed in the United States of 
  7. America.
  8. The Apple logo is a registered trademark of Apple Computer, Inc. Use of the “keyboard” 
  9. Apple logo (Option-Shift-K) for commercial purposes without the prior written consent of 
  10. Apple may constitute trademark infringement and unfair compe-tition in violation of federal and state laws.
  11. Apple Computer, Inc. 
  12. 20525 Mariani Avenue  
  13. Cupertino, CA  95014-6299
  14. 408-996-1010  
  15. Apple, the Apple logo, APDA, AppleLink, AppleShare, 
  16. AppleTalk, Apple IIGS, A/UX, EtherTalk, HyperCard, Hyper-Talk, ImageWriter, LaserWriter, LocalTalk, Mac, Macintosh, MPW, MultiFinder, SANE, and TokenTalk are registered trade-marks of Apple Computer, Inc.
  17. Apple Desktop Bus, Balloon Help, Finder, KanjiTalk, Moof, QuickDraw, ResEdit, TrueType, and Zhong-Wen Talk are trade-marks of Apple Computer, Inc.
  18. Helvetica and Times are 
  19. registered trademarks of 
  20. Linotype Company.
  21. ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.
  22. MacPaint is a registered trade-mark of Claris Corporation.
  23. NuBus is a trademark of Texas 
  24. Instruments.
  25. PostScript is a registered trade-mark, and Illustrator is a 
  26. trademark, of Adobe Systems 
  27. Incorporated.
  28. Sony is a registered trademark of Sony Corporation.
  29. UNIX is a registered trademark of UNIX System Laboratories, Inc.
  30. Simultaneously published in the United States and Canada.
  31. Limited Warranty on Media and Replacement
  32. Even though Apple has 
  33. reviewed this manual, APPLE MAKES NO WARRANTY OR REPRESENTATION, EITHER EXPRESS OR IMPLIED, WITH RESPECT TO THIS MANUAL, ITS QUALITY, ACCURACY, MERCHANT-ABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. AS A RESULT, THIS 
  34. MANUAL IS SOLD “AS 
  35. IS,” AND YOU, THE PUR-CHASER, ARE ASSUMING THE ENTIRE RISK AS TO ITS QUALITY AND 
  36. ACCURACY.  
  37. IN NO EVENT WILL APPLE BE LIABLE FOR DIRECT, 
  38. INDIRECT, SPECIAL, 
  39. INCIDENTAL, OR CONSE-QUENTIAL DAMAGES 
  40. RESULTING FROM ANY 
  41. DEFECT OR INACCURACY IN THIS MANUAL, even if advised of the possibility of such damages.  
  42. THE WARRANTY AND REMEDIES SET FORTH ABOVE ARE EXCLUSIVE AND IN LIEU OF ALL 
  43. OTHERS, ORAL OR 
  44. WRITTEN, EXPRESS OR 
  45. IMPLIED. No Apple dealer, agent, or employee is 
  46. authorized to make any 
  47. modification, extension, or 
  48. addition to this warranty.  
  49. Some states do not allow the exclusion or limitation of 
  50. implied warranties or liability for incidental or consequential damages, so the above 
  51. limitation or exclusion may not apply to you. This warranty gives you specific legal rights, and you may also have other rights which vary from state to state.
  52. The Printing Manager
  53. Introduction to Printing2-3
  54. Methods and Qualities of Printing2-4
  55. Page and Paper Rectangles2-4
  56. Printer Resolution2-5
  57. About the Printing Manager2-6
  58. The User’s Formatting Input2-6
  59. The Print Record and the Printing Loop2-7
  60. The Idle Procedure2-8
  61. Using the Printing Manager2-9
  62. Creating and Using the Print Record2-9
  63. Printing a Document2-10
  64. Printing From the Finder2-15
  65. Printing Each Page as a Separate Document2-15
  66. Printing From the Low-Level Interface2-16
  67. Checking for PrGeneral2-16
  68. Determining the Resolution of the Current Printer2-17
  69. Determining Page Orientation2-20
  70. Choosing Draft-Quality Printing2-21
  71. Altering the Style or Job Dialog Box2-23
  72. Writing an Idle Procedure2-25
  73. Optimizing Printing2-26
  74. Optimizing PostScript Printing2-26
  75. Providing Names of Documents Being Printed2-27
  76. Canceling or Pausing the Printing Process2-28
  77. Handling Printing Errors2-28
  78. Using Alert or Dialog Boxes to Report Errors2-28
  79. Interpreting PrGeneral Errors2-29
  80. Reference2-29
  81. Data Structures2-29
  82. TPrint  2-30
  83. TPrInfo 2-31
  84. TPrJob 2-31
  85. TPrStl 2-33
  86. TPrStatus 2-33
  87. TPrPort2-34
  88. TGnlData 2-35
  89. TGetRslBlk 2-35
  90. TSetRslBlk 2-37
  91. TDftBitsBlk 2-38
  92. TGetRotnBlk 2-38
  93. TPrDlg 2-39
  94. Routines2-40
  95. Opening and Closing the Printing Manager2-40
  96. Filling and Verifying Print Records2-41
  97. Displaying and Customizing the Printing Dialog Boxes2-43
  98. Printing2-47
  99. Optimizing Printing2-51
  100. Error Handling2-54
  101. Low-Level Routines2-56
  102. Low-Level Control Calls2-58
  103. Summary2-61
  104. 1The Printing Manager
  105. This chapter describes the theory behind and implementation of printing from the Macintosh computer to any printer: Your application draws a printed document on a printer just as it draws an image on a monitor screen. This manner of printing allows you to use the same QuickDraw routines for printing as for screen display. The chapter also describes what your application needs to do to allow the user to print on any type of printer and how you can optimize printing on different types of printers.
  106. You should use this chapter if you want your application to allow the user to print. 
  107. Before reading this chapter, you should be familiar with QuickDraw’s drawing routines and the grafPort data type. You may also need to refer to the <italics\>Worldwide Software volume for information about printing text from non-Roman script systems.
  108. This chapter begins with a description of the elements of the printing environment:  types of printing, page characteristics, and printer characteristics. Then it describes 
  109. n    printing a document
  110. n    optimizing printing performance
  111. n    handling printing errors
  112. n    using picture comments
  113. For further information about the LaserWriter printer and how it operates, see the LaserWriter Reference, published by Addison-Wesley. For information about how PostScript works and the specifics of PostScript commands, see the PostScript Language Reference Manual, also published by Addison-Wesley. 
  114. Introduction to Printing
  115. In order for your application to print, it sends an image to a printer, taking into account the features the printer offers, how the printer prints, and the size of the paper the user wants. Your application doesn’t have to know the kind of printer the user has chosen, because you call the same printing routines, regardless of the type of printer. These routines are translated into actual printing code by the printer resource file, which is on the user’s system. (Each type of printer has its own printer resource file.) The printer resource file contains a device driver, called the printer driver, that takes the document from the Printing Manager and sends it to the printer. One printer driver can communicate with several printers of the same type; for example, the LaserWriter printer driver can work with several LaserWriter printers on a network.   
  116. Your application should be device-independent when it prints a document, so that it doesn’t rely on any one printer feature being present. For instance, the current printer the user has selected may produce laser-quality or dot-matrix type, and your application should be ready to handle both. The Printing Manager takes much of the work out of coming up with a single way to handle all possible printer environments. However, while you shouldn’t depend on any feature being present, there are a few things about printers of which you should be aware and which you can use to optimize printing: the method of printing the user wants, the size of the paper on which the user will print the document, and the resolution of the printer.
  117. Methods and Qualities of Printing
  118. There are two basic methods of printing documents: immediate and deferred. The Printing Manager chooses which method to use by determining the capabilities of the current printer and using the printing preferences selected by the user.  The two printing methods are implemented in different ways for different printers. 
  119. Immediate printing means that the document prints as your application draws it in the printing grafPort. Your QuickDraw drawing calls are converted directly into command codes the printer driver understands and uses to print the document. Your printing code, the data to be printed, and the printer driver code are all present in memory. Immediate printing is also known as draft printing.   
  120. With deferred printing, the Printing Manager writes out a representation of the document’s printed image to a disk file (called a spool file) or possibly to memory; this information is then converted into a bit image and printed. Deferred printing is also known as spool printing.   
  121. The internal format of spool files is private to the Printing Manager and may vary from one printer to another. You should not attempt to determine the format of these files or use <36pt\>\x12 <8bat\>u 
  122. There are also two qualities of printing: high-quality and draft-quality. High-quality printing produces documents that use all of the fonts and formatting that the user has included. Draft-quality printing produces quick, low-quality drafts of text documents that are printed straight down the page from top to bottom and left to right. Generally, only text is printed using the printer’s internal fonts, without formatting.   
  123. n    The LaserWriter printer produces only high-quality output. 
  124. n    The ImageWriter printer can produce high-quality or draft-quality output. Deferred printing produces standard or high-quality printing; immediate printing produces draft-quality printing. 
  125. Page and Paper Rectangles
  126. There are two sizes to consider when printing a document: the physical size of the paper, and the area on the paper that the printer can use to format the document, which should be smaller than the physical sheet of paper to account for margins. 
  127. The page rectangle represents the boundaries of the printable page. Its top left corner always has the coordinates (0,0); the coordinates of the bottom right corner give the maximum page height and width attainable on the given printer, in dots. The paper rectangle gives the physical paper size, defined in the same coordinate system as the page rectangle. Thus, the top left coordinates of the paper rectangle are typically negative and its bottom right coordinates are greater than those of the page rectangle. The relationship of the two rectangles is shown in Figure 1-1.     
  128. Page and paper rectangles  
  129. Your application should always use the page rectangle sizes provided by the printer driver and should not attempt to change them or add new ones. If your application supports page size other than those provided by the printer driver for the current printer, you risk compatibility problems with Apple’s printer drivers and those of third-party printer makers. 
  130. When formatting a page for printing, remember that in general the screen is wider than it is tall, whereas the page is taller than it is wide. You should use the page rectangle size that the user has chosen in order to format the document. (See “The Print Record and the Printing Loop” on page 1-7 for more information about where to find the user’s choices for formatting the document.) 
  131. Printer Resolution 
  132. Resolution is the degree of clarity of your display device, whether a screen or a printer. A monitor has better resolution than a television set used as a monitor, and a laser printer has better resolution than a dot-matrix printer. Resolution is usually specified in dots per inch, or dpi, in the X and Y directions. The higher the value, the finer the detail of the image.  
  133. A printer supports either discrete or variable resolution. Discrete resolution means that the application can choose from a limited number of resolutions predefined by the printer driver. For example, the ImageWriter printer supports four discrete resolutions: 72 ¥ 72 dpi, 144 ¥ 144 dpi, 80 ¥ 72 dpi, and 160 ¥ 144 dpi.  
  134. Variable resolution means the application can define any resolution within a range bounded by maximum and minimum values. The LaserWriter printer driver supports variable resolution within a range from 25 dpi to 1500 dpi in both the X and Y directions. (However, a LaserWriter printer that uses PostScript supports a maximum resolution of 300 ¥ 300 dpi. Some other PostScript devices that use the LaserWriter printer driver can achieve higher resolutions, up to the maximum supported by the LaserWriter driver.) 
  135. In order to print, your application does not need to check the resolutions available or set the resolution. However, if your application does factor in possible resolutions, it can obtain the best quality output from a printer choosing equal resolutions for the X and Y directions. Some devices support X and Y resolutions that are not equal, but using this type of resolution usually results in a distortion of the printed image. For information on how to determine the available resolution or resolutions for the currently selected printer, see “Determining the Resolution of the Current Printer” on page 1-17. 
  136. About the Printing Manager
  137. In order to print, your application first uses the Printing Manager to open the printer driver. You then prepare the document for printing by formatting it as necessary for the page size that the user has selected. When you print, you draw the document using QuickDraw routines into the printing grafPort. 
  138. The Printing Manager gives you a  printing grafPort when you open a document for printing. The printing grafPort data type is a QuickDraw grafPort with additional fields that customize it for printing. (You must check for the type of grafPort data type, because it may be a color grafPort data type.) The TPPrPort data type defines the printing grafPort record.     
  139. TYPE                    TPPrPort            =    ^TPrPort;
  140.                     TPrPort            =    
  141. RECORD
  142.                 gPort: GrafPort;                        {grafPort to draw in }
  143.                 gProcs: QDProcs;                        {drawing routines of the printer driver}
  144.                 { more fields for internal use }
  145. END;
  146. You print text and graphics by drawing into this port with QuickDraw calls, just as if you were drawing on the screen. (The printer driver installs its own versions of QuickDraw’s low-level drawing routines in the gProcs field of the printing grafPort data type, causing your higher-level QuickDraw calls to drive the printer instead of drawing on the screen. You should store your versions of QuickDraw routines in the gProcs field of the gPort field of the grafPort data type.)  
  147. Once you have drawn the document in the printing grafPort, the printer driver takes over, translating the QuickDraw calls for the printer. The printer itself does nothing except draw the document on a page, exactly as the printer driver directs it. 
  148. The User’s Formatting Input
  149. The user gives you the information on how to format and print a document—for example, the dimensions of the page, the pages of the document that should be printed, the number of copies—through two standard dialog boxes: the style dialog box and the job dialog box. 
  150. The style dialog box lets the user specify the dimensions of the paper rectangle and any options that affect the image to be printed, which is the information you need to format the document. Your application can customize the style dialog box to ask for additional information. Figure 1-2 shows a sample style dialog box for the LaserWriter SC printer. Your application should present the style dialog box when the user chooses the Page Setup command from the File menu. 
  151. A sample style dialog box 
  152. The job dialog box lets the user specify how to print the document this time, such as the print quality (whether high-quality or draft-quality), the type of paper feed (such as paper tray or manual), the range of pages to print, and the number of copies. Your application can customize the job dialog box to ask for information beyond these topics. Figure 1-3 shows a sample job dialog box for the LaserWriter SC printer. Your application should present the job dialog box when the user chooses the Print command from the File menu. 
  153. A sample job dialog box 
  154. The Print Record and the Printing Loop
  155. In order to print a document, you need a print record. The print record, of type TPrint (see page 1-30) contains the Printing Manager version, information about the printer (such as its resolution in dpi), the dimensions of the paper rectangle, and the specifications the user made in the style and job dialog boxes.  
  156. The print record has several subrecords. The printer information subrecord, of type TPrInfo (see page 1-31), gives you the information needed for page composition, including the vertical and horizontal resolution of the printer in dpi and the boundaries of the page rectangle (which is determined in the style dialog box, discussed on page 1-6). The printing job subrecord, of type TPrJob (see page 1-31), gives you information about a particular printing job; for instance, the first and last pages to be printed, the number of copies, and the method of printing the Printing Manager will use. The user sets its contents using the job dialog box.   
  157. Your application should not change the data in the print record—be sure to use the standard dialog boxes to set this information. The only fields you may need to set directly are some containing optional information in the printing job subrecord (for example, the pointer to the idle procedure). Attempting to set other values directly in the print record can produce unexpected results. <36pt\>\x12 <8bat\>s  
  158. Your application should contain a printing loop, which is where all the printing needs are handled, including presenting the job dialog box and determining the range of pages to be printed. 
  159. In the printing loop, you open the Printing Manager, initialize a grafPort data type for the document (“open” the document), and calculate the bounding rectangle for one page of the document (“open” a page). Each page needs to be opened and closed before you can handle any subsequent page of the document, so that you can determine exactly how much information of the document fits on each page. When you are through with the pages, you then close the document and close the Printing Manager before ending. You must always issue the closing routine that matches any opening routines (for instance, PrOpenDoc and PrCloseDoc), even if the user has aborted printing or if an error is returned by the open calls. 
  160. An example of a printing loop is shown in Listing 1-1 on page 1-12.
  161. The Idle Procedure
  162. You can designate an idle procedure to be run whenever the Printing Manager has directed output to the printer. It stops running once the entire document has been sent to the printer and does not run while the printer actually prints. The idle procedure takes no parameters and returns no result; the Printing Manager simply runs it at every opportunity. 
  163. Some applications use the idle procedure to produce a dialog box, such as the one in Figure 1-4, on the screen that informs the user that the document is printing and the Command-period command will cancel printing. 
  164. A sample idle procedure
  165. If you don’t designate a idle procedure, the Printing Manager uses its default idle procedure. The printing job subrecord of the print record contains a pointer to the idle procedure in the PIdleProc field.  For more information about what to be aware of when creating a idle procedure, see “Writing an Idle Procedure” on page 1-25.     
  166. Using the Printing Manager
  167. You can use the Printing Manager to print documents, to display and alter the printing dialog boxes, and to handle printing errors. The Printing Manager provides routines that give your application device-independent control over the printing process. 
  168. All printable documents must have a print record. Each print record contains information about page size, number of copies requested, and the pages the user wants printed, among other things. You should store this print record with the document so that you can save the user’s preferences. 
  169. To print a user’s document, first create or validate the document’s print record. Then you should have a printing loop that handles printing and checks for printing errors at every step.  
  170. You should never assume what type of printer has been selected; that is, your application should always be able to print to any type of printer. 
  171. To use the Printing Manager, you must first initialize QuickDraw, the Font Manager, the Window Manager, the Menu Manager, TextEdit, and the Dialog Manager. The first Printing Manager routine to call is PrOpen; the last routine to call is PrClose.
  172. Creating and Using the Print Record
  173. In order to print a document, you need a valid print record that is formatted for the current versions of the Printing Manager and the printer driver. The print record has information such as the vertical and horizontal resolution of the printer in dpi, the boundaries of the page rectangle, the number of copies, and the method of printing the user has requested.
  174. To create a new print record, you must first create a handle to it with the Memory Manager function NewHandle. You then must fill the fields of the record with appropriate values; for example, use PrintDefault to set the fields to the default values stored in the printer driver. 
  175. prRecHdl := THPrint(NewHandle(SIZEOF(TPrint)));
  176. PrintDefault(prRecHdl);
  177. You can use an existing print record (for instance, one saved with a document). If you use an existing print record, be sure to call the PrValidate function before using the print record to make sure it’s valid for the current version of the Printing Manager and for the currently installed printer. 
  178. You should save the print record when the user closes the document. This saves any preferences that the user has selected for printing that document, such as orientation of the page or page size. 
  179. Many of the fields in the print record are reserved for use by Apple and they are likely to change without notice. Also, every printer driver uses the fields of the print record differently. In order to maintain compatibility with the Printing Manager, there are some guidelines you should follow:
  180. n    Do not test for the contents of undocumented fields.
  181. n    Do not set fields in the print record directly.
  182. n    You should use the existing print dialog boxes, or, if you want to customize them, alter them only as recommended in “Altering the Style or Job Dialog Box” on page 1-23.
  183. Printing a Document
  184. The printing loop calls all the Printing Manager routines necessary to print a document. The general printing loop shown in Listing 1-1 is an extremely broad example of a printing loop—for example, the code does not optimize for the type of  printer being used nor for the material being printed (text, graphics, or a mixture of both). However, it does cover the major aspects of what is needed in a printing loop: the balance of open and close calls, determining page count, and providing support for documents longer than the maximum named by the Printing Manager constant iPFMaxPgs. 
  185. The printing loop starts by getting a pointer to the current grafPort. Then it calls a routine, MyUnloadTheWorld, that swaps out code segments not required during printing. (The specifics of this routine are left up to the individual application.) At this point, it opens the Printing Manager, printer driver, and printer resource file for use by calling PrOpen.
  186. The loop saves the driver’s resource file so that if your idle procedure changes the resource chain in any way, the driver does not lose its resources. (See “Writing an Idle Procedure” on page 1-25.) The PrintDefault procedure fills the print record with the default values specified by the current printer driver; the user may change these values with the style and job dialog boxes. 
  187. In order to print the document, you must divide the data into sections that fit within the page rectangle dimensions set by the user in the style dialog box and stored in the rPage field of the printing job record. The MyDetermineNumOfPages function must be specific to the application, because the way the application divides up the data depends on the type of text and graphics in the document. 
  188. After determining the number of pages, the printing loop presents the user with the job dialog box. The user’s responses here provide information such as the number of the copies and the page numbers of the first and last pages requested. The loop stores these values in local variables such as firstPage and lastPage. It then resets the values of the first and last pages in the printing job record as 1 and 9999 (using the constant iPrPgMax). 
  189. The loop compares the values of the number of pages in the document with the last page the user requested. If the user has requested the printing loop to print page 50 of a two-page document, the printing loop resets the value of the last page to 2. This avoids printing errors later on in the loop.  
  190. At this point, the loop begins the process of sending the pages off to be printed. It puts up the dialog box of the idle procedure and restores the printer driver’s resource chain. 
  191. Once in the page loop, the printing loop checks to see if the size of the file is greater than the maximum number of pages that can be printed (given by the constant  iPFMaxPgs). If the user has chosen immediate printing, your application can print iPFMaxPgs number of pages and then begin the printing loop again with the next section of the document. If the user has chosen deferred printing and the file is larger than iPFMaxPgs, the loop closes the document and sends the first 128 pages to a spool file to be printed. You then must go back and print the next portion of the document. You can print any number of iPFMaxPgs pages, provided you only send that many at any one time. 
  192. The loop then opens a page for printing and draws the page in the printing grafPort with the MyDrawStuff procedure, the details of which are specific to the application. In this loop, the parameters contain the size of the page rectangle, the grafPort selected, and the page number to be printed. The application can use the same code to print a page of a document as it uses to draw the same page on screen. 
  193. When the loop is finished printing, it closes the document. If the user has selected spool printing, you call the PrPicFile procedure, which sends the spool file to the printer driver. The printing loop then closes the Printing Manager, reports any Printing Manager errors, and resets the grafPort record to the original port. 
  194. At the end of the printing loop, all open routines to the Printing Manager are balanced with close routines. This is extremely important to do, even if you stop printing because of an error. Failure to call the matching close calls can cause the Printing Manager to perform incorrectly.
  195. Note that every section of the procedure calls PrError after each Printing Manager routine. If an error is found, the loop calls a close routine (for instance, PrClose or PrCloseDoc) for any Printing Manager open routines (PrOpen or PrOpenDoc) before alerting the user of the error. You should use this approach in your own application to make sure the Printing Manager closes properly and all temporary memory is released. 
  196. A sample print loop
  197. { Below is a general print loop.  The code makes no assumption about }
  198. { what printer is being used nor does it take advantage of what's }
  199. { being printed; text, graphics, whatever.  Depending on how you }
  200. { implement your own print loop for your application, you can make }
  201. { it robust with print status dialogs and idle procs or simpler }
  202. { without them.  You must remember to balance the open and close }
  203. { calls to the Printing Manager.  Failure to do so can cause the }
  204. { Printing Manager to not perform correctly. }
  205.  
  206. PROCEDURE MyPrintLoop;
  207.  
  208. VAR
  209.     copies:                        Integer;
  210.     firstPage:                        Integer;
  211.     lastPage:                        Integer;
  212.     numberOfCopies:                        Integer;
  213.     pageNumber:                        Integer;
  214.     printResFile:                        Integer;
  215.     printError:                        Integer;
  216.     numberOfPages:                        Integer;
  217.     oldPort:                        GrafPtr;
  218.     theStatus:                        TPrStatus;
  219.     
  220. BEGIN
  221.     GetPort(oldPort);
  222.     
  223.     {MyUnloadTheWorld is your routine to swap out unneeded segments that }
  224.     { are not required during print time.  Your print code must be in a }
  225.     { separate code segment.  You need to do this for memory considerations.}
  226.     
  227.     MyUnLoadTheWorld;
  228.     
  229.     PrOpen;
  230.     IF (PrError = noErr) THEN
  231.     BEGIN
  232.         {Save the current resource file so the driver will not }
  233.         { lose its resources upon return from pIdleProc.}
  234.         
  235.         printResFile := CurResFile;
  236.         
  237.         PrintDefault(gPrintRec);
  238.         IF (PrError = noErr) THEN
  239.         BEGIN
  240.             {MyDetermineNumOfPages is your routine that determines }
  241.             { the number of pages contained in the document by }
  242.             { comparing the size of the document with rPage, the }
  243.             { printable area for the currently selected printer. }
  244.             { It returns the number of pages required to print the }
  245.             { document.  This routine is specific to the individual }
  246.             { application.}
  247.                 
  248.             numberOfPages := MyDetermineNumOfPages(gPrintRec^^.prInfo.rPage);
  249.             
  250.             IF (PrJobDialog(gPrintRec)) THEN
  251.             BEGIN
  252.                 {Get the number of copies along with the first }
  253.                 { and last pages of the document that the user }
  254.                 { wants printed.  Also, pretend you are going }
  255.                 { to print the entire document.}
  256.  
  257.                 numberOfCopies := gPrintRec^^.prJob.iCopies;
  258.                 firstPage := gPrintRec^^.prJob.iFstPage;
  259.                 lastPage := gPrintRec^^.prJob.iLstPage;
  260.                 gPrintRec^^.prJob.iFstPage := 1;
  261.                 gPrintRec^^.prJob.iLstPage := iPrPgMax;
  262.                 
  263.                 {Determine the "real" number of pages contained }
  264.                 { in the document. Without this test, you could }
  265.                 { print up to iPrPgMax pages, or at least try to.}
  266.  
  267.                   IF (numberOfPages < lastPage) THEN lastPage := numberOfPages;
  268.                 
  269.                 {Install and call your "Print Status Dialog" here. }
  270.                 { For example: }
  271.                 { printStatusDlg := GetNewDialog(257, NIL, pointer(-1)); }
  272.                 { gPrintRec^^.prJob.pIdleProc := @checkMyPrintDlgButton;}
  273.                     
  274.                 {Print the number of copies of the document }
  275.                 { requested by the user from the print job dialog.}
  276.                 
  277.                 FOR copies := 1 TO numberOfCopies DO
  278.                 BEGIN
  279.                     {Restore the printer driver's resource file.}
  280.                     UseResFile(printResFile);
  281.  
  282.                     {Print the range of pages of the document }
  283.                     { requested by the user from the job dialog.}
  284.                     
  285.                     FOR pageNumber := firstPage TO lastPage DO
  286.                     BEGIN
  287.                         {Check for max size of spool file.  If it is larger than }
  288.                         { a multiple of 128, then close the doc, initiate }
  289.                         { printing, and reopen the doc.  Notice that the }
  290.                         { IF statement is always true the first time through, }
  291.                         { thus ensuring the doc is always opened.}
  292.                             
  293.                         IF (pageNumber - firstPage) MOD iPFMaxPgs = 0 THEN
  294.                         BEGIN
  295.                             IF pageNumber <> firstPage THEN
  296.                             BEGIN
  297.                                 PrCloseDoc(gPrinterPort);
  298.                                 IF (gPrintRec^^.prJob.bJDocLoop = bSpoolLoop) AND
  299.                                     (PrError = noErr) THEN
  300.                                     PrPicFile(gPrintRec, NIL, NIL, NIL, theStatus);
  301.                             END;
  302.                             gPrinterPort := PrOpenDoc(gPrintRec, NIL, NIL);
  303.                         END;
  304.                         IF (PrError = noErr) THEN
  305.                         BEGIN
  306.                             PrOpenPage(gPrinterPort, NIL);
  307.                             IF (PrError = noErr) THEN
  308.                             {The rPage field of the prInfo record is the }
  309.                             { printable area for the currently selected }
  310.                             { printer. If you send the current port, your }
  311.                             { app can use the same routine to draw to}
  312.                             { the screen and the printer's GrafPort. }
  313.                             
  314.                             MyDrawStuff (gPrintRec^^.prInfo.rPage,
  315.                                             GrafPtr(gPrinterPort), pageNumber);
  316.                             PrClosePage(gPrinterPort);
  317.                         END;
  318.                     END;
  319.                     PrCloseDoc(gPrinterPort);
  320.                     IF (gPrintRec^^.prJob.bJDocLoop = bSpoolLoop) AND
  321.                         (PrError = noErr) THEN
  322.                         PrPicFile(gPrintRec, NIL, NIL, NIL, theStatus);
  323.                 END;
  324.             END;
  325.         END;
  326.     END;
  327.     
  328.     {Get the error before PrClose or the error disappears.}
  329.     
  330.     printError := PrError;
  331.     PrClose;
  332.     
  333.     {You do not want to report any printing errors until you have fallen }
  334.     { through the printing loop. This will make sure that ALL of the Print }
  335.     { Manager's open calls have their corresponding close calls, thereby }
  336.     { enabling the Print Manager to close properly and that all temporary }
  337.     { memory allocations are released.}
  338.  
  339.    IF (printError <> noErr) THEN DoError(ePrint, printError);
  340.     SetPort(oldPort);
  341. END;
  342. Printing From the Finder
  343. To print a document from the Finder, the user selects the document’s icon and chooses the Print command from the File menu. When the Print command is chosen, the Finder starts up the application and passes information to it indicating that the document is to be printed rather than opened on the screen. Your application should then do the following, preferably without going through its entire startup sequence:
  344.     1.    Call the PrJobDialog function, described on page 1-43. If the user selected more than one document, you can use the PrJobMerge function, described on page 1-46, to apply the results of one job dialog box to all of the documents.
  345.     2.    Print the document or documents. 
  346. Most applications open the document on the screen while printing. Although this is not necessary, it is helpful to the user. 
  347. You can also print from the Finder using the pDoc Apple event. See the chapter “Finder Interface” in the <italics\>Operating System volume of Inside Macintosh for more information about how to print from the Finder.   
  348. Printing Each Page as a Separate Document
  349. Some applications use a method of printing that prints out each page of a spooled document as a separate print job in order to avoid running out of disk space while spooling the document to disk. You should not use this method, known as “spool a page, print a page,” because it only works for a printer directly connected to the user’s computer (and not to a network) and therefore creates device dependence, and because it’s extremely slow. If the printer is a remote or shared device (such as a LaserWriter printer or an ImageWriter printer connected by AppleTalk), another application could print a document between the pages of your user’s document. At worst, if both applications printing to the shared printer use the “spool a page, print a page” method, the printed documents could end up interleaved. The pages for one of the documents could be out of order, even when printed by itself. 
  350. Printing From the Low-Level Interface
  351. The low-level interface is the set of routines that use the Device Manager directly to print. Some printer drivers converts the routines in the low-level interface into their equivalents in the high-level interface, so you won’t gain a speed advantage by using the low-level routines. In fact, your code may run slower. The low-level interface is used primarily on the ImageWriter printer for printing text and graphics.
  352. If you want to use the low-level interface, you should use the code in Listing 1-2, so that the Printing Manager can properly convert the low-level calls to the high-level interface. 
  353. Printing a page using the low-level interface
  354. PrDrvrOpen;                                {opens the printer driver}
  355. PrCtlCall(iPrDevCtl, lPrDocOpen, 0, 0); {opens the document}
  356. PrCtlCall(iPrDevCtl, lPrPageOpen, 0, 0); {opens the page}
  357.                     {Here you send the data to be printed}
  358. PrCtlCall(iPrDevCtl, lPrPageClose, 0, 0); {closes the page}
  359. PrCtlCall(iPrDevCtl, lPrDocClose, 0, 0); {closes the document}
  360. PrDrvrClose;                                {closes the printer driver}
  361. The routines in the low-level interface are documented in “Low-Level Routines” on page 1-56 and “Low-Level Control Calls” on page 1-58. 
  362. Checking for PrGeneral
  363. The PrGeneral procedure (described on “Optimizing Printing” on page 1-51) allows you to determine the resolution of the printer, set the resolution you want, find out if the user has selected landscape printing, or force draft-quality printing. You call the PrGeneral procedure with one of five opcodes: GetRslDataOp, SetRslOp, GetRotnOp, DraftBitsOp, or NoDraftBitsOp. Four of these opcodes have data structures associated with them. (The fifth, NoDraftBitsOp, serves to reverse the effect of the DraftBitsOp opcode and so does not have its own data structure.) 
  364. Not all printer drivers have implemented the PrGeneral procedure however, so your code can’t depend on being able to use it. 
  365. Listing 1-3 shows how to check to see whether the current printer driver has implemented the PrGeneral procedure. In Listing 1-3, the current printing error is set to 0 or noErr. The opcode field of the page orientation record (type TGetRotnBlk) is set to the getRotnOp opcode, which is the opcode to determine if the user has chosen landscape orientation. The code passes the address of the page orientation record to the PrGeneral procedure. The code then calls PrErr to get any errors that result from calling PrGeneral. If the error is opNotImpl, the printer driver does support PrGeneral but not that particular opcode. If the error is resNotFound, the printer driver does not support PrGeneral.  The code then sets the function result to FALSE.    
  366. Checking for the PrGeneral procedure
  367. FUNCTION DoIsPrGeneralThere: Boolean;
  368.  
  369. VAR
  370.     getRotRec:    TGetRotnBlk;
  371.     myPrintErr:    OsErr;
  372.     
  373. BEGIN
  374.     myPrintErr := 0;
  375.     getRotRec.iOpCode := getRotnOp;
  376.     getRotRec.hPrint := myPrRecHdl;
  377.     PrGeneral(@getRotRec);
  378.     myPrintErr := PrError;
  379.     PrSetError(noErr);
  380.     IF (myPrintErr = noErr) THEN DoIsPrGeneralThere := TRUE
  381.     ELSE
  382.         IF (myPrintErr = OpNotImpl) THEN
  383.         { PrGeneral is supported but this opcode isn't. }
  384.             DoIsPrGeneralThere := TRUE
  385.         ELSE
  386.             IF (myPrintErr = resNotFound) THEN
  387.             { PrGeneral isn't supported by the current printer driver. }
  388.                 DoIsPrGeneralThere := FALSE;
  389. END;
  390. Determining the Resolution of the Current Printer
  391. Some printer drivers support one of two possible kinds of resolution: discrete or variable. You can use the PrGeneral procedure (page 1-51) to determine the kind of resolution supported by the current printer and then use the highest  resolution desired by the application or the user. 
  392. Each printer has its own unique imaging capabilities. When you call PrGeneral with the value GetRslDataOp for the opcode field of the parameter block, the Printing Manager returns the resolutions that the printer supports. Figure 1-5 shows the get-resolution records (type TGetRslBlk) returned by the LaserWriter and ImageWriter printer drivers. Both contain all the fields of the TGetRslBlk data type, but the LaserWriter record has values for the X and Y resolution range fields and only one resolution record, whereas the ImageWriter record has a value of 0 in the X and Y resolution range fields and four resolution records. 
  393. Resolutions for LaserWriter and ImageWriter printers
  394. You can also set the imaging resolution you want to use. You call PrGeneral with the value SetRslOp for the opcode field of the parameter block and the resolutions in the X and Y directions you want to use via the set-resolution record (page 1-37). The Printing Manager returns the result code noErr if it has updated the print record with this new resolution, or noSuchRsl if the current printer doesn’t support this resolution.
  395. Listing 1-4 illustrates how to use the PrGeneral procedure to determine the possible resolutions for the current printer and then set the printer to the desired resolution.
  396. Using the GetRslDataOp and SetRslOp opcodes with PrGeneral
  397. FUNCTION DoSetMaxResolution (thePrRecHdl: THPrint): Integer;
  398.  
  399. VAR
  400.         maxDPI:                Integer;
  401.         resIndex:                Integer;
  402.         getResRec:                TGetRslBlk;
  403.         setResRec:                TSetRslBlk;
  404.  
  405. BEGIN
  406.         maxDPI := 0;
  407.         getResRec.iOpCode := getRslDataOp;
  408.         PrGeneral(@getResRec);
  409.         
  410.         {At this point, we have an array of possible resolutions in the }
  411.         { getResRec variable. After checking for errors, we loop through }
  412.         { each resolution range record looking for the highest resolution }
  413.         { available where x and y are equal.  This loop makes no }
  414.         { assumptions about the order of the resolution records.}
  415.         
  416.         IF (getResRec.iError = noErr) AND (PrError = noErr) THEN
  417.         BEGIN
  418.             FOR resIndex := 1 TO (getResRec.iRslRecCnt) DO
  419.             BEGIN
  420.                 IF (getResRec.rgRslRec[resIndex].iXrsl =
  421.                     getResRec.rgRslRec[resIndex].iYrsl) AND
  422.                     (getResRec.rgRslRec[resIndex].iXrsl > maxDPI) THEN
  423.                     maxDPI := getResRec.rgRslRec[resIndex].iYrsl;
  424.             END;
  425.             
  426.             {We now have the desired resolution, set it.}
  427.             
  428.             IF maxDPI <> 0 THEN
  429.             BEGIN
  430.                 WITH setResRec DO
  431.                 BEGIN
  432.                     iOpCode := setRslOp;
  433.                     hPrint := thePrRecHdl;
  434.                     iXRsl := maxDPI;
  435.                     iYRsl := maxDPI;
  436.                 END;
  437.                 PrGeneral(@setResRec);
  438.             END;
  439.             
  440.             IF (setResRec.iError = noErr) AND (PrError = noErr) AND
  441.                 (maxDPI <> 0) THEN DoSetMaxResolution := maxDPI;
  442.         END
  443.         ELSE DoSetMaxResolution := 0;
  444. END;
  445. You can reset the original resolutions used by the printer driver by calling the PrGeneral procedure with the SetRslOp opcode a second time. You should save the values contained in the iVRes and iHRes fields of the printer information record before making the first call to PrGeneral. You can also reset the original resolutions by calling the PrintDefault procedure with the print record, which sets all of the fields of the print record to the default values of the current printer resource file. However, if you use PrintDefault you lose all of the selections from the last time the user used the style dialog box.  (You may want to set the original resolution because that may be the printer’s best resolution, though not its highest.)
  446. If, based on the information you get with a call to PrGeneral using the GetRslDataOp opcode, you decide to change the resolution with a call to PrGeneral using the SetRslOp opcode, the Printing Manager may need to change the appearance of the style and job dialog boxes, disabling some items. (The appearance of the dialog boxes and which items are disabled is up to the printer driver.) Therefore, you should determine and set the resolution before you present the Printing Manager dialog boxes to the user.   
  447. Determining Page Orientation
  448. At times it can be useful for your application to determine which page orientation the user selected in the style dialog box. For instance, if an image only fits on a page if it is printed in landscape orientation and the user has not selected landscape orientation, your application can remind the user to select this orientation before printing. Otherwise, the user gets a clipped image. 
  449. If you call the PrGeneral procedure with the GetRotnOp opcode, the Printing Manager returns a handle to the current print record and a Boolean variable that says whether or not the user has selected landscape orientation. Because the user should have already selected the type of orientation when you check this value, you should not call PrGeneral with the GetRotnOp opcode until after you present the style dialog box to the user. 
  450. Listing 1-5 illustrates how to determine whether the user has selected landscape orientation for the current document.
  451. Using the GetRotnOp opcode with the PrGeneral procedure to determine page orientation
  452. FUNCTION DoIsLandscapeModeSet (thePrRecHdl: THPrint): Boolean;
  453.  
  454. VAR
  455.                 GetRotRec:    TGetRotnBlk;
  456.  
  457. BEGIN
  458.                 GetRotRec.iOpCode := getRotnOp;
  459.                 GetRotRec.hPrint := thePrRecHdl;
  460.                 PrGeneral(@getRotRec);
  461.                 
  462.                 IF (GetRotRec.iError = noErr) AND (PrError = noErr) AND
  463.                     GetRotRec.fLandscape THEN
  464.                     BEGIN
  465.                         DoIsLandscapeModeSet := TRUE;
  466.                     END
  467.                 ELSE DoIsLandscapeModeSet := FALSE;
  468. END;
  469. Choosing Draft-Quality Printing
  470. If your application needs to print only text or bitmaps, it can increase performance and save disk space by choosing draft-quality printing. The Printing Manager prints the document immediately, rather than spooling it to disk as with deferred printing. On the ImageWriter printer, draft printing produces quick, low-quality drafts. The LaserWriter printer does not print documents in draft-quality.  
  471. In order to force draft-quality printing, you can call the PrGeneral procedure with the DraftBitsOp opcode. The DraftBitsOp opcode has no effect if the printer does not support draft-quality printing (like the LaserWriter printer) or does not support deferred printing.
  472. If you want to force draft-quality printing, you should call PrGeneral with the DraftBitsOp opcode before presenting the style and job dialog boxes to the user, particularly when the current printer is an ImageWriter printer. The use of the DraftBitsOp opcode disables the landscape icon in the style dialog box and the Best and Faster options in the job dialog box. 
  473. Listing 1-6 illustrates how to force draft-quality printing.
  474. Using the DraftBitsOp opcode with the PrGeneral procedure to force draft quality printing
  475. FUNCTION DoDraftBits(thePrRecHdl: THPrint): Boolean;
  476.  
  477. VAR
  478.                 draftBitsBlk:    TDftBitsBlk;
  479.  
  480. BEGIN
  481.                 draftBitsBlk.iOpCode := draftBitsOp;
  482.                 draftBitsBlk.hPrint := thePrRecHdl;
  483.                 PrGeneral(@draftBitsBlk);
  484.  
  485.                 IF (draftBitsBlk.iError = noErr) AND (PrError = noErr) THEN
  486.                     DoDraftBits := TRUE                                { draft printing is on }
  487.                 ELSE DoDraftBits := FALSE;                                    { draft printing is NOT on }
  488. END;
  489. You can call PrGeneral with the NoDraftBitsOp opcode to turn off the effects of the DraftBitsOp opcode, as shown in Listing 1-7. If you call PrGeneral with NoDraftBitsOp without first calling it with DraftBitsOp, the procedure does nothing. As with the DraftBitsOp opcode, you should call PrGeneral with the NoDraftBitsOp opcode before you present the style and job dialog boxes to the user. 
  490. Using the NoDraftBitsOp opcode with the PrGeneral procedure to turn off draft quality printing
  491. FUNCTION DoNoDraftBits(thePrRecHdl: THPrint): Boolean;
  492.  
  493. VAR
  494.                 draftBitsBlk:    TDftBitsBlk;
  495.  
  496. BEGIN
  497.                 draftBitsBlk.iOpCode := nodraftBitsOp;
  498.                 draftBitsBlk.hPrint := thePrRecHdl;
  499.                 PrGeneral(@draftBitsBlk);
  500.     
  501.                 IF (draftBitsBlk.iError = noErr) AND (PrError = noErr) THEN
  502.                     DoNoDraftBits := TRUE            { draft printing is NOT on }
  503.                 ELSE DoNoDraftBits := FALSE;        { draft print is on }
  504. END;
  505. Altering the Style or Job Dialog Box
  506. The standard style and job dialog boxes that the printer resource file provides for the LaserWriter printer are shown on page 1-7. Each dialog box has options that the user can set. If you want to use the standard style or job dialog box, call the PrStlDialog function (page 1-43) or PrJobDialog (page 1-43) function . 
  507. You may wish to add some additional options to these dialog boxes so that the user can customize the printing process even further. However, there are strict guidelines about altering style or job dialog boxes:
  508. n    If you want to add items to the current dialog box, add them only at the end of the list. Do not delete items from the existing item list, rearrange them, or add new items in the middle of the list. 
  509. n    The additional options should be below the standard ones in the dialog box, leaving the standard ones unchanged. 
  510. n    Don’t count on an item retaining its current position on the screen or in the dialog item list in the code.
  511. n    Don’t use more than half the smallest screen height for your items. Apple reserves the right to expand the items in the standard dialog boxes to fill the top half of the screen.
  512. n    If you want to add a lot of items to the dialog boxes, be aware this may confuse users. You should consider having your own separate dialog box in addition to the existing Printing Manager dialog boxes. 
  513. n    Dialog boxes may actually be color windows, which may affect your code somewhat.
  514. If you want to modify either of the Printing Manager dialog boxes, you need to change the printing dialog box record (page 1-39). This record contains a pointer to the dialog box’s window, a pointer to the dialog event filter, and a pointer to procedures for evaluating dialog items, and a handle to the current print record. 
  515. A dialog event filter is a function that extends the Dialog Manager’s event-handling functionality. When your application displays the style or job dialog box, you can use an event filter to handle events that the Dialog Manager doesn’t handle—such as update events in background applications or the Command-period key-down event. The dialog hook in the pItemProc field is analogous to the Standard File dialog hook: it tells you which item of which dialog box the user has selected, and you can handle the item or the printer driver can handle the item if it’s one of the original items of the dialog box.      
  516. TPrDlg = RECORD
  517.                 Dlg:                DialogRecord;                             {Ptr to the dialog box}
  518.                 pFltrProc:                ModalFilterProcPtr;                            {The dialog event filter}
  519.                 pItemProc:                PItemProcPtr;                            {The item evaluating proc.}
  520.                 hPrintUsr:                THPrint;                            {The print record}
  521.                 fDoIt:                Boolean;                            {Reserved by Apple}
  522.                 fDone:                Boolean;                            {Reserved by Apple}
  523.                 lUser1:                LongInt;                            {Reserved by Apple}
  524.                 lUser2:                LongInt;                            {Reserved by Apple}
  525.                 lUser3:                LongInt;                            {Reserved by Apple}
  526.                 lUser4:                LongInt;                            {Reserved by Apple}
  527.                 END;
  528. If you want to customize a style or job dialog box, first call the initialization function for a pointer to that dialog box. The PrStlInit function (page 1-45) returns a handle to the standard style dialog box; the PrJobInit function (page 1-45) returns a handle to the standard job dialog box. Then you can call the PrDlgMain function (page 1-44) with the address of your own initialization function. 
  529. The program DoModifyDialogs, given in Listing 1-8, modifies the job dialog box. The Print function calls the PrJobInit function and stores the handle to the job dialog box it returns in the variable PrtJobDialog. The Print function then calls the PrDlgMain function with the address of the program’s initialization function, MyJobDlgInit. 
  530. The MyJobDlgInit function fills in the fields of the printing dialog box record, appends the customized dialog items onto the dialog box, replaces the original item handler with the customized item handler, and returns the modified job dialog box to the Print function. The customized dialog item handler is in the MyJobItems procedure. Note that your item handler must call the original item handler, so that the Printing Manager can handle original items in the dialog box.
  531. Please note that your dialog hook must call the standard dialog hook to handle all of the standard dialog’s original items. If you wish to have an event filter, handle it the same way that you do a dialog hook. 
  532. The code  in Listing 1-8 works for the style dialog box if you replace all of the functions specific to the job dialog box with those specific for the style dialog box.<36pt\>\x12 <8bat\>u
  533. Adding items to a job dialog box
  534. See the chapter “Dialog Manager” in the Inside Macintosh: <italics\>Macintosh Toolbox for more information about dialog boxes, dialog items, and filter procedures. See the chapter “Standard File Package” in the Inside Macintosh: <italics\>Operating System volume for more information about the Standard File dialog hook. 
  535. Writing an Idle Procedure
  536. The Printing Manager runs the idle procedure while it sends a document to the printer. (See “The Idle Procedure” on page 1-8.) The Printing Manager’s default idle procedure allows the user to cancel printing. The procedure just polls the keyboard and sets a Printing Manager error code if the user types Command-period (to cancel the printing job). If you use the default procedure, you should display a dialog box during printing to inform the user that the Command-period command is available.
  537. If you choose to write your own idle procedure instead of using the default Printing Manager procedure, there are several guidelines you must follow:
  538. n    If you designate an idle procedure, you must set the PIdleProc field of the print record after presenting the dialog boxes, validating the print record, and initializing the fields in the printing record, because the routines that perform these operations reset the PIdleProc field to NIL. 
  539. n    You must install your idle procedure in the print record before calling the PrOpenDoc procedure. Otherwise, the printer driver does not give the idle procedure any time. You install a pointer to your procedure in the pIdleProc field of the printing job subrecord (page 1-31). 
  540. n    Do not attempt any printing from within the idle procedure, because the Printing Manager is not reentrant.
  541. n    You must call WaitNextEvent to capture mouse clicks or the Command-period sequence that signals the user wants to cancel printing.
  542. n    Don’t call the QuickDraw OpenPicture function or DrawPicture procedure. 
  543. n    You must save the printer’s grafPort upon entry to the idle procedure and restore it upon exit if you draw anything within the idle procedure. If you don’t, the printer driver draws into the grafPort of your dialog box instead of its own grafPort. To save the printer’s grafPort, call the GetPort procedure when entering the idle procedure. Before you exit, call the SetPort procedure to set the port back to the printer driver’s grafPort. (The GetPort and SetPort procedures are described in the chapter “QuickDraw”.)
  544. n    If your idle procedure changes the resource chain, you should save the printer driver’s resource chain by calling the CurResFile function and saving the ID of the printer driver’s resource file at the beginning of your idle procedure. (Any routine that changes the value of the global variable TopMapHdl, such as the OpenResFile function or the UseResFile procedure, changes the resource chain. Some printer drivers assume the resource chain does not change, and you may get an error if you do change it.) When you exit for from the idle procedure, restore the resource chain with the UseResFile procedure. If you are not changing the resource chain, you do not need to save the resource chain. (CurResFile, OpenResFile, and UseResFile are described in the chapter “Resource Manager” of Inside Macintosh: <italics\>Operating System.)
  545. n    Avoid calling the PrError function within the idle procedure. Errors that occur while it is executing are usually temporary and serve only as internal flags for communication within the printer driver, not for the application. If you absolutely must call PrError within your idle procedure and an error occurs, do not cancel printing. Wait until the last called printing procedure returns and then check to see if the error still remains. 
  546. For information about installing a procedure to handle requests to cancel printing or pause printing, see “Canceling or Pausing the Printing Process” on page 1-28.  
  547. Optimizing Printing
  548. QuickDraw is the primary means you use in order to print, and in general you can use QuickDraw in the printing grafPort exactly as you would for a screen grafPort. There are a few things to note when drawing to the printing grafPort: 
  549. n    With each new page, you get a completely reinitialized grafPort, so you’ll need to reset font information and other grafPort characteristics as desired.
  550. n    Don’t make calls that don’t do anything on the printer. For example, erase operations are quite time-consuming and normally aren’t needed on the printer.
  551. n    Don’t use clipping to select text to be printed. There are a number of subtle differences between how text appears on the screen and how it appears on the printer; you can’t count on knowing the exact dimensions of the rectangle occupied by the text.
  552. n    Don’t use fixed-width fonts to align columns. Since spacing gets adjusted on the printer, you should explicitly move the pen to where you want it.
  553. n    Don’t use the Outline text style to create white text on a black background.
  554. n    Avoid using the QuickDraw erase calls (for example, EraseRect).  An erase routine takes time because every bit (90,000 bits per square inch) has to be cleared.  Erasing is unnecessary because the paper does not need to be erased the way the screen does. Avoid using the TextBox procedure, which makes calls to the EraseRect procedure.  You might want to use a different method of displaying text (for example, DrawString or DrawText) or write your own version of TextBox.
  555. n    Avoid changing fonts frequently.  
  556. n    Because of the way rectangle intersections are determined, if your clip region falls outside of the rectangle given by the rPage field of the printer information subrecord of the print record, you slow down the printer substantially.
  557. Optimizing PostScript Printing
  558. While your printing code should be device-independent, you can optimize it for a LaserWriter printer that uses PostScript. (You cannot be sure that the current printer is a PostScript printer, so you may need to send down two or more versions of the same file: one for a PostScript printer, one for a QuickDraw printer.) For printing to a PostScript printer, you’ll need to observe the following limitations:  
  559. n    Regions aren’t supported; try to simulate them with polygons or bitmaps. 
  560. n    Clipping regions should be limited to rectangles. PostScript clips non-square patterns to squares. 
  561. n    The invert data type, part of the QuickDraw grafverb data type, is not supported by the PostScript LaserWriter printer driver. 
  562. n    Transfer modes are ignored for all QuickDraw objects except 1-bit bitmaps. With 1-bit bitmaps, srcCopy, srcOr, srcBic, notSrcCopy, and notSrcBit are drawn. The copy transfer mode is the only transfer mode supported for all objects except text and bit images. 
  563. n    There can be a small difference in glyph widths between fonts rendered on the screen and on the printer. Only the endpoints of text strings are the same. 
  564. n    PostScript does not support color patterns that use colors other than red, green, blue, cyan, yellow, magenta, white, and black. 
  565. n    The printer may print some large patterns at half or smaller sizes, depending on its resolution. 
  566. n    Polygons and smoothed polygons that result in the creation of paths larger than the limit of the PostScript printer (typically 1500 or 3000, depending on the version of PostScript) result in a PostScript error.
  567. Although the LaserWriter is relatively fast, there are some techniques an application can use to ensure its maximum performance.
  568. n    Printing patterns takes time, because the bitmap for the pattern has to be built.  The patterns black, white, and some of the gray patterns have been optimized to use the PostScript gray scales.  
  569. Remember that when your application sends a document to the LaserWriter printer, it must use immediate printing and cannot use deferred printing; your print code, the document’s data, and the printer driver have to be in memory simultaneously. In order to ensure that you have enough memory available to load the LaserWriter printer driver’s code, you should have all the code you need for printing in a separate segment and unload everything else. 
  570. For information on offscreen bitmaps, the grafverb data type, transfer modes, and the routines mentioned here, see the chapter “QuickDraw”. For more information on PostScript, see the PostScript Language Reference Manual, available from Addison-Wesley. 
  571. Providing Names of Documents Being Printed
  572. Some printers (usually those that are shared between many users, like the LaserWriter printer) can provide the names of the users who are printing and the documents that are being printed to others interested in using the printer. Providing the names of users and documents is a courtesy to other users on the network. The Printing Manager gets the name of the document being printed from the title on the frontmost window on the user’s screen. The PrOpenDoc and PrValidate procedures call the FrontWindow procedure to get the document’s name.    
  573. The Printing Manager can’t get a document name if your application doesn’t display windows while printing. For example, many applications do not open windows for their documents when the user prints from the Finder. If there is no front window, or if the window’s title is empty, the Printing Manager defaults to “Unspecified.”
  574. You can ensure that the document name is available by putting up a window containing a message like “Press Command–period to cancel printing,” and give it the document’s title. If the window is one that doesn’t have a title bar (like those of type dBoxProc), this title is not displayed. If you don’t want to put up a visible window, you can create a tiny window (for instance, type plainDBox) and hide it behind the menu bar by giving it the global coordinates of (1,1,2,2). See the chapter “The Window Manager” in Inside Macintosh: <italics\>Macintosh Toolbox for information about dBoxProc and plainDBox window types. 
  575. Do not set the document name in the print record directly. Not all printer drivers support this field, and Apple does not guarantee that internal fields of the Printing Manager’s data structures will remain the same.<36pt\>\x12 <8bat\>u 
  576. Canceling or Pausing the Printing Process
  577. If you install a procedure for handling requests to cancel printing, do not include an option to pause the printing process. Pausing may cause timeout problems when printing to the LaserWriter printer.  Communication between the Macintosh computer and the LaserWriter must be maintained to prevent a job or a wait timeout.  If there is no communication for a period of time (over two minutes), the printer times out and the print job terminates due to a wait timeout.  Because there is no good way to determine the type of printer, you should be aware of the possibility of a LaserWriter printer timing out for a user who wants to pause printing for over two minutes.  
  578. Handling Printing Errors
  579. You should always check for error conditions while printing by calling the PrError function. Errors returned may include AppleTalk and Operating System errors in addition to Printing Manager errors.
  580. Don’t call PrError from within your idle procedure. See “Writing an Idle Procedure” on page 1-25 for more information. 
  581. If you determine that an error has occurred after the completion of a printing routine, stop printing. Call the close routine that matches any open routine you have called. For example, if you call PrOpenDoc and received an error, skip to the next PrCloseDoc; if you called PrOpenPage and got an error, skip to the next PrClosePage and PrCloseDoc. Remember that if you have called some open procedure, you must call the corresponding closing procedure to ensure that the printer driver closes properly and that all temporary memory allocations are released and returned to the heap. 
  582. Using Alert or Dialog Boxes to Report Errors
  583. Do not display any alert or dialog boxes to report an error until the end of the printing loop.  Once at the end, check for the error again; if there is no error assume that printing completed normally.  If the error is still present, then you can alert the user. This technique is important for two reasons.  
  584. First of all, if you display a dialog box in the middle of the printing loop, it could cause errors that can terminate an otherwise normal job.  For example, if the printer is an AppleTalk printer, the connection can be terminated abnormally since the driver would be unable to respond to AppleTalk requests received from the printer while the dialog box was waiting for input from the user.  If the printer does not hear from the Macintosh system within a short period of time (anywhere from 30 seconds to 2 minutes, depending on the driver), it assumes that the Macintosh system is no longer there and times out. The timeout results in a prematurely broken connection, causing another error, to which the application must respond. (See “Canceling or Pausing the Printing Process” on page 1-28.)
  585. The second reason is that the driver may have already displayed its own dialog box in response to an error.  In this instance, the driver posts an error to let the application know that something went wrong and it should cancel printing.  For example, when the LaserWriter driver detects that the Laser Prep version that has been downloaded to the LaserWriter is different from that with which the user is trying to print, it displays the appropriate dialog box informing the user of the situation and giving the user the option of reinitializing the printer.  If the user chooses to cancel printing, the driver posts an error to let the application know that it needs to cancel printing, but since the driver has already taken care of the error by displaying a dialog box, the error is reset to 0 before the printing loop is complete.  The application should check for the error again at the end of the printing loop, and if it still indicates an error, the application can then display the appropriate dialog box.
  586. Interpreting PrGeneral Errors
  587. If you are using the PrGeneral procedure, be prepared to receive the following errors:  noSuchRsl, opNotImpl, and resNotFound.  In all three cases, the application should be prepared to continue to print without using the features of that particular opcode.
  588. The resNotFound error means the current printer driver does not support the PrGeneral procedure.  This lack of support should not be a problem for your application, but you need to be prepared to deal with this error.  If you receive a resNotFound result code from PrError, clear the error with a call to PrSetError with a value of 0 as the parameter; otherwise, PrError might still contain this error the next time you check it, which would prevent your application from printing.
  589. Reference
  590. This section describes the data structures, routines, and resources provided by the Printing Manager. 
  591. The “Data Structures” section shows the Pascal data structures used by the Printing Manager. The “Routines” section describes the routines you can use to print a document, produce or alter a printing dialog box, and handle printing errors. 
  592. Data Structures
  593. The data structures of the Printing Manager primarily fall into two groups: the records and subrecords of the print record, and the records used by the PrGeneral procedure. 
  594. In almost all cases, a field in one of the Printing Manager data structures that is listed as being reserved contains device-dependent information. You should not rely on this information being available or accurate when printing from your application. 
  595. TPrint   
  596. The TPrint record is the print record that every document must have before you can print it. It contains handles to the print information and job subrecords (TPrInfo, described on page 1-31 and TPrJob, described on page 1-31). 
  597. TPrint = RECORD
  598.                 iPrVersion: Integer;                            { Printing software version}
  599.                 prInfo: TPrInfo;
  600.                     { the PrInfo data associated with the current style.}
  601.                 rPaper: Rect;                        { The paper rectangle [offset from rPage]}
  602.                 prStl: TPrStl;                        {  This print request's style.}
  603.                 prInfoPT: TPrInfo;                  { Reserved }
  604.                 prXInfo: TPrXInfo;
  605.                     {  Print-time (expanded) Print info record.}
  606.                 prJob: TPrJob;
  607.                     { The Print Job request  Total of the above;
  608.                     120-82 = 38 bytes needed to fill 120}
  609.                 printX: ARRAY [1..19] OF Integer;
  610.                     {Spare to fill to 120 bytes!}
  611.                 END;
  612. iPrVersion    The version of the Printing Manager that initialized this print record. It is recommended that you use the PrDrvrVers function (page 1-58) instead if you want to determine the current version of the printer driver; your application may not have updated this print record for the current printer.    
  613. prInfo    The information needed for page composition. This record is of type TPrInfo, which is described on page 1-31.
  614. rPaper    The paper rectangle. This rectangle encompasses the page rectangle, which is specified by the rPage field of the printer information record, described on page 1-31.
  615. prStl    The printer’s device number and the feed type, described on page 1-33.
  616. prInfoPT    Reserved by Apple. 
  617. prXInfo    Reserved by Apple. 
  618. prJob    Information about this particular printing job. The results of the job dialog box sets its contents. This record is of type TPrJob, which is described on page 1-31. 
  619. printX    Reserved by Apple.
  620. If you try to use a print record that’s invalid for the current version of the Printing Manager or for the currently installed printer, the Printing Manager will correct the record by filling it with default values. 
  621. You should not alter the contents of the print record directly. 
  622. TPrInfo   
  623. The TPrInfo record is the printer information subrecord of the print record. It contains the vertical and horizontal resolutions of the printer and coordinates of the page rectangle. 
  624. TPrInfo = RECORD
  625.                 iDev: Integer;                        {Font mgr/QuickDraw device code}
  626.                 iVRes: Integer;                        {Resolution of device, in device coordinates}
  627.                 iHRes: Integer;
  628.                     {..note: V before H => compatable with Point.}
  629.                 rPage: Rect;
  630.                 {The page (printable) rectangle in device coordinates.}
  631.                 END;
  632. iDev    Reserved by Apple.
  633. iVRes    The printer’s vertical resolution in dots per inch. The default value is 72, unless you have made a call to the PrGeneral procedure with the SetRsl opcode (described in “Determining the Resolution of the Current Printer” on page 1-17). 
  634. iHRes    The printer’s horizontal resolution in dots per inch. The default value is 72, unless you have made a call to the PrGeneral procedure with the SetRslOp opcode. 
  635. rPage    The page rectangle. This rectangle is inside the paper rectangle, specified by the rPaper field of the print record, described on page 1-30. The style dialog box sets this value. 
  636. TPrJob  
  637. The TPrJob subrecord of the TPrint print record contains information about a particular printing job. The user accepting the contents of the job dialog box or your application calling the PrintDefault procedure (page 1-42) sets its contents.
  638. TPrJob = RECORD
  639.                 iFstPage: Integer;                                  {Page Range.}
  640.                 iLstPage: Integer;
  641.                 iCopies: Integer;                                   {Number of copies.}
  642.                 bJDocLoop: SignedByte;                  {The Doc style: Draft or Spool}
  643.                 fFromUsr: Boolean;                                 {Reserved}
  644.                 pIdleProc: PrIdleProcPtr; {Pointer to the background procedure}
  645.                 pFileName: StringPtr;               {Spool File Name: NIL for default.}
  646.                 iFileVol: Integer;                                 {Spool File vol, set to 0 initially}
  647.                 bFileVers: SignedByte;
  648.                   {Spool File version, set to 0 initially}
  649.                 bJobX: SignedByte;                                 {Reserved}
  650.                 END;
  651. iFstPage    The page number of the first page being printed.
  652. iLstPage    The page number of the last page being printed. 
  653. iCopies    The number of copies requested, which is also the number of times your application should send the document to the printer. However, some printer drivers handle multiple copies internally and this value will be 1.
  654. bJDocLoop    The printing method that the Printing Manager will use. It will be one of the following predefined constants:
  655.                                 CONST bDraftLoop = 0;                                {draft printing}
  656.                                         bSpoolLoop = 1;                        {spool printing}
  657. fFromUsr    Reserved by Apple.
  658. pIdleProc    A pointer to the background procedure (described in “The Idle Procedure” on page 1-8) for this printing operation. 
  659. pFileName    The name of the spool file. This field is initialized to NIL and is should not be changed by your application. This field denotes the default file name (normally 'Print File') stored in the printer resource file.
  660. iFileVol    The volume reference number of the spool file. This field is initialized to 0, representing the default volume. You can use the File Manager function SetVol (described in the File Manager chapter of the <italics\>Operating System volume) to change the default volume. 
  661. bFileVers    The version number of the spool file, initialized to 0. 
  662. bJobX    Reserved by Apple.
  663. TPrStl   
  664. The TPrStl record contains the device number of the current printer and the feed type currently selected (paper cassette or manual). All other fields are reserved. 
  665. TPrStl = RECORD
  666.                 wDev: Integer;
  667.                 iPageV: Integer;
  668.                 iPageH: Integer;
  669.                 bPort: SignedByte;
  670.                 feed: TFeed;
  671.                 END;
  672. wDev    The high-order byte contains the device number of the current printer. The low-order byte is reserved.
  673. iPageV    Reserved by Apple.
  674. iPageH    Reserved by Apple.
  675. bPort    Reserved by Apple.
  676. feed    The feed type currently selected.  The possible values are:
  677.                             TFeed = (feedCut,feedFanfold,feedMechCut,feedOther);
  678. TPrStatus   
  679. The TPrStatus record is used by the PrPicFile procedure (page 1-50), which you use to print spooled documents. 
  680. TPrStatus = RECORD
  681.                 iTotPages: Integer;                             {Total pages in Print File.}
  682.                 iCurPage: Integer;                             {Current page number}
  683.                 iTotCopies: Integer;                            {Total copies requested}
  684.                 iCurCopy: Integer;                             {Current copy number}
  685.                 iTotBands: Integer;                             {Reserved}
  686.                 iCurBand: Integer;                             {Reserved}
  687.                 fPgDirty: Boolean;
  688.                              {True if current page has been written to.}
  689.                 fImaging: Boolean;                             {Reserved}
  690.                 hPrint: THPrint;                            {Handle to the active print record}
  691.                 pPrPort: TPPrPort;                             {Ptr to the active PrPort}
  692.                 hPic: PicHandle;                            {Handle to the active Picture}
  693.                 END;
  694. iTotPages    The total number of pages being printed. This is the same value as the value of iLastPage minus the value of iFirstPage, which are both from the TPrJob record. 
  695. iCurPage    The sequence number of the page currently being printed. For example, if the user prints pages 10 through 15 of a 20-page document, the value of the iCurPage field for page 10 is 1.  
  696. iTotCopies    The total number of copies requested. This value may be different from the value of the field iCopies from TPrJob.  
  697. iCurCopy    The number of the current copy being printed. 
  698. iTotBands    Reserved by Apple. 
  699. iCurBand    Reserved by Apple. 
  700. fPgDirty    A flag indicating whether the printer has begun printing the current page. Set to TRUE if there has been any imaging on the current page.
  701. fImaging    A flag indicating whether the printer driver is in the middle of a DrawPicture call. 
  702. hPrint    The handle to the current print record.
  703. pPrPort    The pointer to the active printing grafPort data type.
  704. hPic    The handle to the active picture. This is used by the printer driver; your application should not alter it. 
  705. TPrPort
  706. The TPrPort record is the printing grafPort, which contains a handle to a QuickDraw grafPort, among other fields. 
  707. TPrPort = RECORD
  708.                 gPort: GrafPort;            {The Printer's grafPort.}
  709.                 gProcs: QDProcs;            {The procedures for printing in the grafPort}
  710.                 lGParam1:LongInt;                        {Reserved}
  711.                 lGParam2:LongInt;                        {Reserved}
  712.                 lGParam3:LongInt;                        {Reserved}
  713.                 lGParam4:LongInt;                        {Reserved}
  714.                 fOurPtr:Boolean;                        {Reserved}
  715.                 fOurBits:Boolean;                        {Reserved}
  716. END;
  717. gPort    The Printer’s grafPort.
  718. gProcs    Pointers to routines that the printer driver may have designated to take the place of QuickDraw routines. See the chapter “QuickDraw” for more information. You can include a pointer to routines that you would like to include in the grafProcs field of the grafPort data type.  
  719. lGParam1    Reserved by Apple. 
  720. lGParam1    Reserved by Apple. 
  721. lGParam1    Reserved by Apple. 
  722. lGParam1    Reserved by Apple. 
  723. fOurPtr    Reserved by Apple. 
  724. fOurBits    Reserved by Apple. 
  725. TGnlData   
  726. The TGnlData record is the basic record used by the PrGeneral procedure. Although no opcode of PrGeneral uses TGnlData, all other records that are used are based on this record.  
  727. TGnlData = RECORD
  728.                 iOpCode: Integer;
  729.                 iError: Integer;
  730.                 lReserved: LongInt;                 {more fields here depending on call}
  731.                 END;
  732. iOpCode    The opcode that is passed to PrGeneral to obtain the requested feature. There are five possible opcodes: GetRslDataOp, SetRslOp, GetRotnOp, DraftBitsOp, and NoDraftBitsOp. 
  733. iError    The result code returned by PrGeneral.
  734. lReserved    Reserved by Apple. Additional fields may follow this field, depending on the opcode used. See the descriptions of the TGetRslBlk (page 1-35), TSetRslBlk (page 1-37), TDftBitsBlk (page 1-38), and TGetRotnBlk (page 1-38) records. 
  735. TGetRslBlk   
  736. The TGetRslBlk data structure is the record that you pass to the PrGeneral procedure when you use the GetRslDataOp opcode. The PrGeneral procedure returns the record with the resolutions available on the current printing device. For information on how to use the GetRslDataOp opcode with the PrGeneral procedure, see “Determining the Resolution of the Current Printer” on page 1-17. 
  737. If the printer uses discrete printing, the number of resolution values available on the printer is listed in the iRslRecCnt field and the records containing those values are in the rgRslRec array. If the printer supports variable printing, the resolution ranges in the X and Y directions are in the xRslRg and yRslRg fields. 
  738. TGetRslBlk = RECORD
  739.                 iOpCode: Integer;                            {The opcode passed to PrGeneral}
  740.                 iError: Integer;                            {The result code returned by PrGeneral}
  741.                 lReserved: LongInt;                            {Reserved by Apple}
  742.                 iRgType: Integer;                            {The printer driver version number}
  743.                 xRslRg: TRslRg;                            {The X-direction resolution range}
  744.                 yRslRg: TRslRg;                            {The Y-direction resolution range}
  745.                 iRslRecCnt: Integer;                            {The number of resolution records}
  746.                 rgRslRec: ARRAY [1..27] OF TRslRec; 
  747.                                             {The array of resolution records}
  748.                 END;
  749. iOpCode    The opcode passed to the PrGeneral procedure to obtain the requested feature. In the case of the TGetRslBlk record, the opcode is GetRslDataOp. 
  750. iError    The result code returned by PrGeneral.
  751. lReserved    Reserved by Apple. 
  752. iRgType    The version number returned by the printer driver. The LaserWriter and ImageWriter printers always return 1. If this field is not 1, don’t use the data in this record.  
  753. xRslRg    The resolution range supported for the X direction. If the current printer does not support variable resolution, this value is 0. 
  754. yRslRg    The resolution range supported for the Y direction. If the current printer does not support variable resolution, this value is 0. 
  755. iRslRecCnt    The number of resolution records used by a particular printer driver, up to 27.
  756. rgRslRec    An array of resolution records, each specifying a discrete resolution at which the current printer can print an image. 
  757. The xRslRg and yRslRg fields of the TGetRslBlk record are of type TRslRg. This data structure contains the minimum and maximum resolutions supported by the current printer driver. If the current printer does not support variable resolution, both fields of this subrecord are 0.
  758. TRslRg = RECORD
  759.                 iMin: Integer;                        {The minimum resolution supported}
  760.                 iMax: Integer;                        {The maximum resolution supported}
  761.                 END;
  762. iMin    The minimum resolution supported by the current printer. If the printer supports only discrete resolutions, this value is 0.
  763. iMax    The maximum resolution supported by the current printer. If the printer supports only discrete resolutions, this value is 0.
  764. The rgRslRec field of the TGetRslBlk record are of type TRslRec. The TRslRec subrecord specifies a discrete resolution supported by the printer. A printer driver can have up to 27 separate TRslRec records. (The ImageWriter printer driver contains 4 such records.)
  765. TRslRec = RECORD
  766.                 iXRsl: Integer;                        {Discrete resolution, X-direction}
  767.                 iYRsl: Integer;                        {Discrete resolution, Y-direction}
  768.                 END;
  769. iXRsl    The discrete resolution supported in the X direction. 
  770. iYRsl    The discrete resolution supported in the Y direction. 
  771. TSetRslBlk  
  772. The TSetRslBlk data structure is the record that you pass to the PrGeneral procedure when you use the SetRslOp opcode. It contains the resolutions that you want to use on the current printing device. For information on how to use the SetRslOp opcode with the PrGeneral procedure, see “Determining the Resolution of the Current Printer” on page 1-17. 
  773. TSetRslBlk = RECORD
  774.                 iOpCode: Integer;                            {The opcode passed to PrGeneral}
  775.                 iError: Integer;                            {The result code returned by PrGeneral}
  776.                 lReserved: LongInt;                            {Reserved by Apple}
  777.                 hPrint: THPrint;                            {A handle to current print record}
  778.                 iXRsl: Integer;                            {The X-direction resolution you want}
  779.                 iYRsl: Integer;                            {The Y-direction resolution you want}
  780.                 END;
  781. iOpCode    The opcode passed to PrGeneral to obtain the requested feature. In the case of the TSetRslBlk record, the opcode is SetRslOp. 
  782. iError    The result code returned by PrGeneral.
  783. lReserved    Reserved by Apple. 
  784. hPrint    A handle to the print record. Your application should have already created this print record and passed it through the PrintDefault procedure to make sure that all of the information in the handle is good. 
  785. iXRsl    The resolution in the X direction that you want the printer to use when printing. 
  786. iYRsl    The resolution in the Y direction that you want the printer to use when printing. 
  787. If the iError field returns noErr, the Printing Manager updates the print record with this resolution, which the printer uses at print time. If the iError field returns noSuchRsl, the current printer doesn’t support the requested resolution and the printer driver does not change the setting. 
  788. TDftBitsBlk  
  789. The TDftBitsBlk record is the data structure is the record that you pass to the PrGeneral procedure when you use the DraftBitsOp opcode. For information on how to use the DraftBitsOp opcode with the PrGeneral procedure, see “Choosing Draft-Quality Printing” on page 1-21. 
  790. TDftBitsBlk = RECORD
  791.                 iOpCode: Integer;                            {The opcode passed to PrGeneral}
  792.                 iError: Integer;                            {The result code returned by PrGeneral}
  793.                 lReserved: LongInt;                            {Reserved by Apple}
  794.                 hPrint: THPrint;                            {A handle to current print record}
  795.                 END;
  796. iOpCode    The opcode passed to the PrGeneral procedure to obtain the requested feature. In the case of the TDftBitsBlk record, the opcode is DraftBitsOp. 
  797. iError    The result code returned by the PrGeneral procedure.
  798. lReserved    Reserved by Apple. 
  799. hPrint    A handle to the print record. Your application should have already created this print record and passed it through the PrintDefault procedure to make sure that all of the information in the handle is good. 
  800. TGetRotnBlk   
  801. The TGetRotnBlk record is the data structure is the record that you pass to the PrGeneral procedure when you use the GetRotnOp opcode. PrGeneral returns it with a Boolean variable that tells you whether the user has selected landscape orientation. For information on how to use the GetRotnOp opcode with the PrGeneral procedure, see “Determining Page Orientation” on page 1-20. 
  802. TGetRotnBlk = RECORD
  803.                 iOpCode: Integer;                            {The opcode passed to PrGeneral}
  804.                 iError: Integer;                            {The result code returned by PrGeneral}
  805.                 lReserved: LongInt;                            {Reserved by Apple}
  806.                 hPrint: THPrint;                            {A handle to current print record}
  807.                 fLandscape: Boolean;                            {If the user wants landscape printing}
  808.                 bXtra: SignedByte;                            {Reserved by Apple}
  809.                 END;
  810. iOpCode    The opcode passed to the PrGeneral procedure to obtain the requested feature. In the case of the TGetRotnBlk record, the opcode is GetRotnOp. 
  811. iError    The result code returned by the PrGeneral procedure.
  812. lReserved    Reserved by Apple. 
  813. hPrint    A handle to the print record. Your application should have already created this print record and passed it through the PrintDefault procedure to make sure that all of the information in the handle is good. 
  814. fLandscape    A Boolean variable that determines whether the user has selected landscape orientation in the style dialog box. A value of TRUE indicates the user has selected landscape orientation.
  815. bXtra    Reserved by Apple. 
  816. TPrDlg  
  817. The TPrDlg record contains the information needed to set up either the style or job dialog box. The PrStlInit and PrJobInit function return this record, set up for the style and job dialog boxes respectively. You can find information on how to customize a printing dialog box in “Altering the Style or Job Dialog Box” on page 1-23.  
  818. TPrDlg = RECORD
  819.                 Dlg:                DialogRecord;                             {Ptr to the dialog box}
  820.                 pFltrProc:                ModalFilterProcPtr;                            {The dialog event filter}
  821.                 pItemProc:                PItemProcPtr;                            {The Item evaluating proc.}
  822.                 hPrintUsr:                THPrint;                            {The print record}
  823.                 fDoIt:                Boolean;                            {Dialog box confirmed}
  824.                 fDone:                Boolean;                            {User’s interaction completed}
  825.                 lUser1:                LongInt;                            {Storage for your application}
  826.                 lUser2:                LongInt;                            {Storage for your application}
  827.                 lUser3:                LongInt;                            {Storage for your application}
  828.                 lUser4:                LongInt;                            {Storage for your application}
  829.                 END;
  830. Dlg    A pointer to the dialog box, which may be either the style or job dialog box. 
  831. pFltrProc    A pointer to the dialog event filter. 
  832. pItemProc    A pointer to the routine that handles the items of the dialog box, also known as the dialog hook. 
  833. hPrintUsr    The document’s print record.
  834. fDoIt    Whether the user has confirmed the dialog box. TRUE means the user has confirmed it by clicking “OK”.
  835. fDone    Whether the user’s interaction is completed. TRUE means the user has clicked either “OK” or “Cancel”. 
  836. lUser1    In this field and the following fields, your application can store any kind of data you wish for the dialog box, such as global storage. 
  837. lUser2    See lUser1.
  838. lUser3    See lUser1.
  839. lUser4    See lUser1.
  840. Routines
  841. This section describes the routines you use to initialize the Printing Manager, print a document, produce or alter a style or job dialog box, and handle printing errors.
  842. The trap macro for all of the routines in the Printing Manager is  _PrGlue, and the trap is $A8FD. The routine selector for each individual routine is provided with the routine. 
  843. Opening and Closing the Printing Manager 
  844. You must always open the Printing Manager before attempting to print and close it when printing is finished. If you don’t, you risk crashing the user’s system.  
  845. 1PrOpen  
  846. Use the PrOpen procedure to prepare the Printing Manager for use. 
  847. PROCEDURE PrOpen;
  848. DESCRIPTION
  849. You must always use the PrOpen procedure before attempting to print anything. 
  850. ASSEMBLY LANGUAGE INFORMATION
  851. The routine selector for the PrOpen procedure is $C8000000. 
  852. Trap macro        Trap
  853. _PrGlue        $A8FD
  854. 1PrClose  
  855. Use the PrClose procedure to close the Printing Manager and release the memory it used. 
  856. PROCEDURE PrClose;
  857. DESCRIPTION
  858. The PrClose procedure is the call that balances a call to the PrOpen procedure.
  859. If you have opened the Printing Manager with the PrOpen procedure, do not call the PrDrvrClose procedure to close the Printing Manager.
  860. ASSEMBLY LANGUAGE INFORMATION
  861. The routine selector for the PrClose procedure is $D0000000. 
  862. Trap macro        Trap
  863. _PrGlue        $A8FD
  864. Filling and Verifying Print Records
  865. You must fill the print record with the values for the current printer driver or, if a print record already exists, verify that the information in the print record is correct. If the print record is not valid for the current printer driver, the document will not print. The PrValidate function ensures that the print record is compatible with the current versions of the printer driver. The PrintDefault procedure fills in a print record with the default values for the currently selected printer. These functions may change the coordinates of the page rectangle or any other value in the print record; you should not assume any values will remain the same.
  866. 1PrValidate  
  867. When you have a print record, whether an existing one from the current document or a new one you have just created, you can use the PrValidate function to check the contents of the specified print record for compatibility with the current version of the printer driver of the current printer. 
  868. FUNCTION PrValidate (hPrint: THPrint): Boolean;
  869. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  870. DESCRIPTION
  871. If the print record is valid, PrValidate returns FALSE, meaning there is no change. If the record is invalid, the function returns TRUE and the Printing Manager adjusts the record with the default values stored in the printer resource file.
  872. PrValidate also makes sure that all the information in the print record is internally self-consistent and updates the print record as necessary. These changes do not affect the function’s Boolean result. 
  873. If you have just created a print record, using the PrintDefault procedure, you do not need to call PrValidate. The PrintDefault procedure does this automatically. 
  874. You should never call PrValidate between the pages of a document. This restriction holds as well for the PrStlDialog and PrJobDialog functions and the PrintDefault procedure, which call PrValidate.<36pt\>\x12 <8bat\>s
  875. ASSEMBLY LANGUAGE INFORMATION
  876. The routine selector for the PrValidate function is $52040498. 
  877. Trap macro        Trap
  878. _PrGlue        $A8FD
  879. 1PrintDefault  
  880. When you create a print record, you use the PrintDefault procedure to fill the fields of the specified print record with default values for resolution, number of copies, and other information in the print record and its subrecords. 
  881. PROCEDURE PrintDefault (hPrint: THPrint);
  882. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  883. DESCRIPTION
  884. The default values for the current printer are stored in the printer resource file. PrintDefault puts these values in the print record, erasing the ones that may already be there (if the print record already existed). PrintDefault calls PrValidate to check the print record for compatibility with the current version of the printer driver. 
  885. ASSEMBLY LANGUAGE INFORMATION
  886. The routine selector for the PrintDefault procedure is $20040480. 
  887. Trap macro        Trap
  888. _PrGlue        $A8FD
  889. SEE ALSO
  890. The print record is discussed in “The Print Record and the Printing Loop” on page 1-7. 
  891. Displaying and Customizing the Printing Dialog Boxes
  892. The style and job dialog boxes allow the user to tell your application how to print the document: page orientation, number of copies, page range to print, and so on. You can use the dialog boxes provided by the Printing Manager, or you can customize the standard dialog boxes. You can copy the results of one job dialog box to several documents when the user wants to print several documents at once.
  893. The PrStlDialog and PrJobDialog functions display the standard style and job dialog boxes. The PrDlgMain function, using the PrStlInit and PrJobInit functions, allows you to customize the standard style and job dialog boxes for your application. 
  894. The PrJobMerge procedure allows you to use one job dialog box for several print jobs, such as when the user prints several documents from the Finder. 
  895. 1PrStlDialog   
  896. Call the PrStlDialog function displays a style dialog box, which the user can use to specify the page dimensions and other information needed for a page setup. 
  897. FUNCTION PrStlDialog (hPrint: THPrint): Boolean;
  898. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  899. DESCRIPTION
  900. The Printing Manager takes the initial settings displayed in the style dialog box  from the print record. If the user confirms the dialog box, the PrStlDialog function returns TRUE, and the Printing Manager saves the results of the dialog box in the specified print record and calls the PrValidate function. Otherwise, the print record is left unchanged and the function returns FALSE. 
  901. ASSEMBLY LANGUAGE INFORMATION
  902. The routine selector for the PrStlDialog function is $2A040484. 
  903. Trap macro        Trap
  904. _PrGlue        $A8FD
  905. 1PrJobDialog  
  906. You can call the PrJobDialog function to produce a job dialog box, which the user can use to determine the print quality, the range of pages to print, and so on. 
  907. FUNCTION PrJobDialog(hPrint: THPrint): Boolean;
  908. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  909. DESCRIPTION
  910. The printer driver shows the default settings for the current printer in the job dialog box. If the user confirms the dialog box, the Printing Manager updates both the print record and the printer resource file and calls the PrValidate function, and the PrJobDialog function returns TRUE. Otherwise, the print record and the printer resource file are left unchanged and the function returns FALSE. 
  911. If the PrJobDialog function returns TRUE, you should proceed with the requested printing operation. 
  912. ASSEMBLY LANGUAGE INFORMATION
  913. The routine selector for the PrJobDialog function is $32040488. 
  914. Trap macro        Trap
  915. _PrGlue        $A8FD
  916. 1PrDlgMain      
  917. Use the PrDlgMain function to display a style or job dialog box after you have customized it. 
  918. FUNCTION PrDlgMain (hPrint: THPrint; pDlgInit: PDlgInitProcPtr): 
  919.                                         Boolean;
  920. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  921. pDlgInit    A pointer to an initialization procedure for one of the two Printing Manager printing dialog boxes, or to your own initialization procedure. 
  922. DESCRIPTION
  923. You can use the PrDlgMain function to set up a printing dialog box, or you can initalize the style or job dialog box yourself and then send PrDlgMain your initialization function. 
  924. The printing dialog boxes initialization functions, PrStlInit and PrJobInit, set up the dialog box in a TPrDlg record (described on page 1-39), which contains pointers for the dialog event filter and the procedure for evaluating the items of the dialog box, including your own. 
  925. ASSEMBLY LANGUAGE INFORMATION
  926. The routine selector for the PrDlgMain function is $4A040894. 
  927. Trap macro        Trap
  928. _PrGlue        $A8FD
  929. SEE ALSO
  930. For more information about customizing style or job dialog boxes, see “Altering the Style or Job Dialog Box” on page 1-23.
  931. 1PrStlInit  
  932. The PrStlInit function returns a pointer to the style dialog box (described on page 1-7) in memory but does not display the dialog box.
  933. FUNCTION PrStlInit (hPrint: THPrint): TPPrDlg;
  934. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  935. DESCRIPTION
  936. You pass the address of the PrStlInit function in the pDlgInit parameter of the PrDlgMain function, which is described on page 1-44. The PrStlInit function returns a pointer to a printing style dialog box.
  937. ASSEMBLY LANGUAGE INFORMATION
  938. The routine selector for the PrStlInit function is $3C04040C. 
  939. Trap macro        Trap
  940. _PrGlue        $A8FD
  941. SEE ALSO
  942. For more information about customizing style or job dialog boxes, see “Altering the Style or Job Dialog Box” on page 1-23.
  943. 1PrJobInit  
  944. The PrJobInit function returns a pointer to the job dialog box (described on page 1-7) in memory but does not display the dialog box. 
  945. FUNCTION PrJobInit (hPrint: THPrint): TPPrDlg;
  946. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  947. DESCRIPTION
  948. You pass the address of the PrJobInit function in the pDlgInit parameter of the PrDlgMain function, which is described on page 1-44. The PrJobInit function returns a pointer to a printing job dialog box.
  949. ASSEMBLY LANGUAGE INFORMATION
  950. The routine selector for the PrJobInit function is $44040410. 
  951. Trap macro        Trap
  952. _PrGlue        $A8FD
  953. SEE ALSO
  954. For more information about customizing style or job dialog boxes, see “Altering the Style or Job Dialog Box” on page 1-23.
  955. 1PrJobMerge  
  956. You can use the PrJobMerge procedure to display a job dialog box just once and then copy the job information to several print records, which means that you can print several documents with one dialog box. This is useful when the user prints from the Finder. 
  957. PROCEDURE PrJobMerge (hPrintSrc: THPrint;hPrintDst: THPrint); 
  958. hPrintSrc    The print record from the Finder.
  959. hPrintDst    The print record from the document. 
  960. DESCRIPTION
  961. The PrJobMerge procedure first calls the PrValidate function for each of the  print records named by the hPrintSrc and hPrintDst parameters. It then copies all of the information set as a result of a job dialog box from the hPrintSrc parameter to the hPrintDst parameter while preserving the values set by the style dialog box for that print record (for instance, landscape orientation). Finally, the PrJobMerge procedure makes sure that all the fields of the print record named by the hPrintDst parameter are internally self-consistent. You must call PrJobMerge for each document the user wants to print; however, it can only make one copy of each document. 
  962. ASSEMBLY LANGUAGE INFORMATION
  963. The routine selector for the PrJobMerge procedure is $5804089C. 
  964. Trap macro        Trap
  965. _PrGlue        $A8FD
  966. Printing
  967. In addition to opening and closing the Printing Manager, you must open and close the document being printed and each page of the document before you can print it. The PrOpenDoc function and PrCloseDoc procedures open and close the document, and the PrOpenPage and PrClosePage procedures open and close the current page.
  968. You must use the PrPicFile procedure to complete a deferred printing. There is no special Printing Manager routine for immediate printing; the routines you use to draw the document in the printing grafPort print the document immediately. 
  969. 1PrOpenDoc   
  970. Use the PrOpenDoc function to initialize a printing grafPort for use in printing a document, make it the current port, and return a pointer to it.
  971. FUNCTION PrOpenDoc (hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: 
  972.                                         Ptr): TPPrPort;
  973. hPrint    The handle to a print record, which may be a new record or an existing one from a document.
  974. pPrPort    A pointer to the printing grafPort. This parameter should be NIL, which means that PrOpenDoc allocates a new printing grafPort in the heap. 
  975. pIOBuf    A pointer to an area of memory to be used as an input/output buffer. This parameter should be NIL, which means that PrOpenDoc uses the volume buffer for the spool file’s volume. If you allocate your own buffer, it must be 522 bytes exactly. 
  976. DESCRIPTION
  977. Depending on the setting of the bJDocLoop field in the printing job subrecord, the Printing Manager sets up the printing grafPort for immediate or deferred printing. For deferred printing, it takes the spool file’s name, volume reference number, and version number from the printing job subrecord. 
  978. Because both the printing grafPort and input/output buffer are nonrelocatable objects, you may want to allocate them yourself using the pPrPort and pIOBuf parameters, to avoid fragmenting the heap. 
  979. You must balance a call to PrOpenDoc with a call to PrCloseDoc.
  980. ASSEMBLY LANGUAGE INFORMATION
  981. The routine selector for the PrOpenDoc function is $04000C00. 
  982. Trap macro        Trap
  983. _PrGlue        $A8FD
  984. SEE ALSO
  985. For an example of a printing loop, see Listing 1-1 beginning on page 1-12. 
  986. 1PrCloseDoc  
  987. Use the PrCloseDoc procedure to close the printing grafPort data type. 
  988. PROCEDURE PrCloseDoc (pPrPort: TPPrPort);
  989. pPrPort    A pointer to the printing grafPort data type. 
  990. DESCRIPTION
  991. For immediate printing, the PrCloseDoc procedure ends the printing job.
  992. For deferred printing, PrCloseDoc ends the deferment: the document must now be printed. Before printing the document, call the PrError procedure to find out whether spooling succeeded. If it did, unload unused code segments  to ensure that you have as much memory as possible in which to print and then call PrPicFile. 
  993. ASSEMBLY LANGUAGE INFORMATION
  994. The routine selector for the PrCloseDoc procedure is $08000484. 
  995. Trap macro        Trap
  996. _PrGlue        $A8FD
  997. SEE ALSO
  998. For an example of a printing loop, see Listing 1-1 beginning on page 1-12. 
  999. 1PrOpenPage  
  1000. Use the PrOpenPage procedure to begin a new page. 
  1001. PROCEDURE PrOpenPage (pPrPort: TPPrPort; pPageFrame: TPRect);
  1002. pPrPort    A pointer to the printing grafPort. 
  1003. pPageFrame    For deferred printing, a pointer to a rectangle to be used as the QuickDraw picture frame for this page. 
  1004. DESCRIPTION
  1005. The page is printed only if it falls within the page range given in the printing job subrecord. 
  1006. If the user has chosen deferred printing, the Printing Manager scales the rectangle named by the pPageFrame parameter (with the QuickDraw procedure DrawPicture) to coincide with the rectangle specified by rPage in the printer information subrecord. Unless you want the printout to be scaled, you should set pPageFrame to NIL—this uses the rPage rectangle as the picture frame, so that the page is printed with no scaling.
  1007. You must balance every call to PrOpenPage with a call to PrClosePage. 
  1008. SPECIAL CONSIDERATIONS
  1009. The printing grafPort is completely reinitialized by PrOpenPage. Therefore, you must set grafPort features such as the font family and font size for every page that you draw after you call this procedure.
  1010. Don’t call the QuickDraw function OpenPicture while a page is open (after a call to PrOpenPage but before calling PrClosePage). You can, however, call DrawPicture at any time.
  1011. ASSEMBLY LANGUAGE INFORMATION
  1012. The routine selector for the PrOpenPage procedure is $10000808. 
  1013. Trap macro        Trap
  1014. _PrGlue        $A8FD
  1015. SEE ALSO
  1016. For an example of a printing loop, see Listing 1-1 beginning on page 1-12. 
  1017. 1PrClosePage  
  1018. Use the PrClosePage procedure to finish the printing of the current page. 
  1019. PROCEDURE PrClosePage (pPrPort: TPPrPort);
  1020. pPrPort    A pointer to the printing grafPort. 
  1021. DESCRIPTION
  1022. PrClosePage tells the Printing Manager that you are finished with this page, so that the printer driver can do whatever is required (such as release temporary memory) for the current printer in order to avoid communication difficulties or other problems that may cause the user’s computer to crash. 
  1023. ASSEMBLY LANGUAGE INFORMATION
  1024. The routine selector for the PrClosePage procedure is $1800040C. 
  1025. Trap macro        Trap
  1026. _PrGlue        $A8FD
  1027. SEE ALSO
  1028. For an example of a printing loop, see Listing 1-1 beginning on page 1-12. 
  1029. 1PrPicFile   
  1030. Use the PrPicFile procedure to complete deferred printing. 
  1031. PROCEDURE PrPicFil (hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: 
  1032.                                         Ptr; pDevBuf: Ptr; VAR prStatus: TPrStatus);
  1033. hPrint    The handle to the specified print record, which may be a new record or an existing one from a document.
  1034. pPrPort    A pointer to the printing grafPort. This parameter should be NIL, which means that PrPicFile should allocate a new printing grafPort in the heap. 
  1035. pIOBuf    A pointer to an area of memory to be used as an input/output buffer. This parameter should be NIL, which means that PrPicFile should use the volume buffer for the spool file’s volume. If you allocate your own buffer, it must be 522 bytes exactly. 
  1036. pDevBuf    A pointer to a device-dependent buffer. This parameter should be NIL, which means that PrPicFile should allocate a buffer in the heap. 
  1037. prStatus    A printing status record that PrPicFile uses to report on its progress: current page number, current copy, or current file being spooled. You can then display this information to the user. The TPrStatus data type is described on page 1-33. 
  1038. DESCRIPTION
  1039. If the user has chosen deferred printing (for example, to get high-quality output on the ImageWriter printer), your application should normally call PrPicFile after PrCloseDoc.
  1040. SPECIAL CONSIDERATIONS
  1041. Be sure not to pass, in the pPrPort parameter, a pointer to the same printing grafPort you received from PrOpenDoc. If that port was allocated by PrOpenDoc itself (that is, if the pPrPort parameter to PrOpenDoc was NIL), then PrCloseDoc will have disposed of the port, making your pointer to it invalid. Of course, if you earlier provided your own storage in PrOpenDoc, there’s no reason you can’t use the same storage again for PrPicFile.
  1042. ASSEMBLY LANGUAGE INFORMATION
  1043. The routine selector for the PrPicFile procedure is $60051480. 
  1044. Trap macro        Trap
  1045. _PrGlue        $A8FD
  1046. Optimizing Printing
  1047. The PrGeneral procedure is a multipurpose routine that allows your application to achieve the highest resolution print output on the current printer, verify page orientation, and increase performance by avoiding deferred printing. In order to select which action you want, you pass an opcode in the iOpcode field of the pData parameter of the procedure. The pData parameter can point to one of four records:  TGetRslBlk (page 1-35), TSetRslBlk (page 1-37), TGetRotnBlk (page 1-38), and TDftBitsBlk (page 1-38). All of these records are based on the TGnlData record (page 1-35), so the first three fields of each are identical.     
  1048. Before using the PrGeneral procedure, you should determine whether the current printer driver supports it. See “Checking for PrGeneral” on page 1-16.
  1049. ASSEMBLY LANGUAGE INFORMATION
  1050. The routine selector for the PrGeneral procedure is $70070480. 
  1051. Trap macro        Trap
  1052. _PrGlue        $A8FD
  1053. 1PrGeneral With the GetRslDataOp Opcode      
  1054. Use the PrGeneral procedure with the value GetRslDataOp for the iOpcode field of the parameter block when you want to determine the resolutions available to the current printer. 
  1055. PROCEDURE PrGeneral (pData: Ptr);
  1056. pData    A pointer to the TGetRslBlk record (page 1-35). 
  1057. DESCRIPTION
  1058. After you call to the PrGeneral procedure with the GetRslDataOp opcode, you should check the value in the iError field of the TGetRslBlk record. The possible result codes are listed below. You should also call PrError (which returns the result code left by the last Printing Manager routine) after checking the iError field, to be sure that no additional errors were generated. 
  1059. RESULT CODES
  1060. noErr    0    No error
  1061. OpNotImpl    2    Printer driver does not support this opcode
  1062. SEE ALSO
  1063. See Listing 1-4 on page 1-19 for an example of how to use the GetRslDataOp opcode to determine what printer resolutions are available for the current printer.
  1064. 1PrGeneral With the SetRslOp Opcode   
  1065. Use the PrGeneral procedure with the value SetRslOp for the iOpcode field of the parameter block  when you want to set the resolution the current printer. 
  1066. PROCEDURE PrGeneral (pData: Ptr);
  1067. pData    A pointer to the TSetRslBlk record (page 1-37). 
  1068. DESCRIPTION
  1069. After you call the PrGeneral procedure with the SetRslOp opcode, you should check the value in the iError field of the TSetRslBlk record. The possible result codes are listed below. You should also call PrError (which returns the result code left by the last Printing Manager routine) after checking the iError field, to be sure that no additional errors were generated. 
  1070. RESULT CODES
  1071. noErr    0    No error
  1072. NoSuchRsl    1    Requested resolution not supported by the 
  1073.         currently selected printer
  1074. OpNotImpl    2    Printer driver does not support this opcode
  1075. SEE ALSO
  1076. See Listing 1-4 on page 1-19 for an example of how to use the SetRslOp opcode to set the resolution for the current printer.
  1077. 1PrGeneral With the GetRotnOp Opcode    
  1078. Use the PrGeneral procedure with the value GetRotnOp for the iOpcode field of the parameter block  when you want to determine if the user has chosen landscape orientation in the style dialog box. 
  1079. PROCEDURE PrGeneral (pData: Ptr);
  1080. pData    A pointer to a TGetRotnBlk record (page 1-38). 
  1081. DESCRIPTION
  1082. After you call the PrGeneral procedure with the GetRotnOp opcode, you should check the value in the iError field of the TGetRotnBlk record. The possible result codes are listed below. You should also call PrError (which returns the result code left by the last Printing Manager routine) after checking the iError field, to be sure that no additional errors were generated. 
  1083. RESULT CODES
  1084. noErr    0    No error
  1085. OpNotImpl    2    Printer driver does not support this opcode
  1086. SEE ALSO
  1087. See Listing 1-5 on page 1-21 for an example of using the GetRotnOp opcode to determine if the user has selected landscape orientation.
  1088. 1PrGeneral With the DraftBitsOp and NoDraftBitsOp Opcodes     
  1089. Use the PrGeneral procedure with the value DraftBitsOp for the iOpcode field of the parameter block when you want to force draft-quality printing. The NoDraftBitsOp opcode cancels the use of draft-quality printing. 
  1090. PROCEDURE PrGeneral (pData: Ptr);
  1091. pData    A pointer to a TDftBitsBlk record (page 1-38). 
  1092. DESCRIPTION
  1093. After you call the PrGeneral procedure with the DraftBitsOp opcode, you should check the value in the iError field of the TDftBitsBlk record. The possible result codes are listed below. You should also call PrError (which returns the result code left by the last Printing Manager routine) after checking the iError field, to be sure that no additional errors were generated. 
  1094. RESULT CODES
  1095. noErr    0    No error
  1096. OpNotImpl    2    Printer driver does not support this opcode
  1097. SEE ALSO
  1098. See “Choosing Draft-Quality Printing” on page 1-21 for more information on using  the DraftBitsOp and NoDraftBitsOp opcodes to force the use of or to cancel the use of draft-quality printing.
  1099. Error Handling
  1100. The PrError function returns the result code left by the last Printing Manager routine. The PrSetError procedure lets you set the value of the current Printing Manager error. 
  1101. 1PrError  
  1102. You can get the result code returned by the last Printing Manager routine from the PrError function. 
  1103. FUNCTION PrError: Integer;
  1104. DESCRIPTION
  1105. If an error that does not belong to the Printing Manager occurs, the Printing Manager puts it into low memory, where it can be retrieved with a call to PrError, and then terminates the printing loop, if necessary.  If you encounter an error in the middle of a printing loop, do not end printing abruptly; call the close routines for any open routines you have already made and let the Printing Manager terminate properly. The Printing Manager returns the following general errors: 
  1106. Name        Result Code        Description
  1107. iPrAbort        128    Application or user
  1108.             requested cancel
  1109. noErr        0    No error
  1110. iPrSavPFil        –1    Saving print file
  1111. controlErr        –17    Unimplemented control
  1112.             instructions
  1113. iIOAbort        –27    I/O error
  1114. iMemFullErr        –108    Not enough room in the
  1115.             heap zone
  1116. resNotFound        –192    The printer does not support
  1117.             the PrGeneral procedure
  1118. The Device Manager returns the controlErr result code. 
  1119. The following result codes are specific to the LaserWriter printer family:
  1120. Result Code    Description
  1121. –8133    PostScript error occurred during transmission of data to printer.  Most  
  1122.     often caused by a bug in the PostScript code being downloaded.
  1123. –8132    Timeout occurred (no communication has occurred with the printer for 
  1124.     2 minutes.  Usually caused by extremely long imaging time.
  1125. –8131    Printer not responding; it may have been turned off.  This error occurs 
  1126.     if a user turns off the LaserWriter printer in the middle of a print job.
  1127. –4101    Printer not found or closed.
  1128. –4100    Connection closed.
  1129. –4099    Write request too big.
  1130. –4098    Request already active.
  1131. –4097    Bad connection refnum.
  1132. –4096    No free Connect Control Blocks (CCBs) available
  1133. If PrError returns resNotFound after you call the PrGeneral procedure, the current printer driver does not support the PrGeneral procedure. You should clear this error with a call to the PrSetError procedure, with a parameter of 0; otherwise, PrError might still contain this error next time you check it.  
  1134. The following errors are specific to thePrGeneral procedure:
  1135. Name        Result Code        Description
  1136. NoSuchRsl        1    Requested resolution is not 
  1137.             supported
  1138. OpNotImpl        2    Requested PrGeneral 
  1139.             opcode not implemented in 
  1140.             the current printer driver.
  1141. resNotfound        –192    The current printer driver 
  1142.             does not support PrGeneral.
  1143. The most common error encountered is –4101, which is generated if no LaserWriter printer is selected.  Since this error is so common, it is a good idea to display a dialog box requesting the user to select a printer from the Chooser when this error is encountered.
  1144. ASSEMBLY LANGUAGE INFORMATION
  1145. The routine selector for the PrError function is $BA000000. 
  1146. Trap macro        Selector
  1147. _PrGlue        $A8FD
  1148. SEE ALSO
  1149. See the section “Handling Printing Errors” on page 1-28 for more information on using PrError. 
  1150. 1PrSetError   
  1151. You can use the PrSetError procedure to set the value of the current printing result code.
  1152. PROCEDURE PrSetError(iErr: Integer);
  1153. iErr    The value of the result code.
  1154. DESCRIPTION
  1155. PrSetError stores the specified value into the global variable PrintErr where the Printing Manager keeps its result code. You can use PrSetError to cancel a printing operation.
  1156. If PrError <> noErr THEN PrSetError(iPrAbort)
  1157. ASSEMBLY LANGUAGE INFORMATION
  1158. The routine selector for the PrSetError function is $C0000200. 
  1159. Trap macro        Trap
  1160. _PrGlue        $A8FD
  1161. Low-Level Routines
  1162. In general, you should use the high-level routines of the Printing Manager in preference to the low-level routines. Low-level calls are not guaranteed to work in future versions of the system software in precisely the same manner as they have in past versions of the software. Low-level routines are primarily suited for functions such as text streaming (the process of receiving data from a source and printing it immediately, without any intermediate formatting). In addition, if you use the low-level routines and the user prints a document on a LaserWriter printer, the LaserWriter printer driver translates all low-level calls to the matching high-level ones, so your application does not gain a speed advantage. 
  1163. You should not use both the high-level and low-level routines at the same time (that is, when one or the other interface has opened the printer driver). The only exception to this is that you may use the PrDrvrVers function (page 1-58) with the high-level routines.<36pt\>\x12 <8bat\>s
  1164. 1PrDrvrOpen   
  1165. The PrDrvrOpen procedure opens the printer driver, reading it into memory if necessary.   
  1166. PROCEDURE PrDrvrOpen;
  1167. DESCRIPTION
  1168. Use the PrDrvrOpen procedure with the PrDrvrClose procedure. Do not mix the open and close routines for the low-level interface with the routines from the high-level interface. 
  1169. ASSEMBLY LANGUAGE INFORMATION
  1170. The routine selector for the PrDrvrOpen procedure is $80000000. 
  1171. Trap macro        Trap
  1172. _PrGlue        $A8FD
  1173. 1PrDrvrClose   
  1174. The PrDrvrClose procedure closes the printer driver, releasing the memory it occupies. 
  1175. PROCEDURE PrDrvrClose;
  1176. ASSEMBLY LANGUAGE INFORMATION
  1177. The routine selector for the PrDrvrClose procedure is $88000000. 
  1178. Trap macro        Trap
  1179. _PrGlue        $A8FD
  1180. 1PrDrvrDCE   
  1181. PrDrvrDCE returns a handle to the printer driver’s device control entry (DCE). 
  1182. FUNCTION PrDrvrDCE: Handle;
  1183. DESCRIPTION
  1184. The printer driver’s device control entry contains specific information about that printer driver. You can also get a handle to the driver’s DCE by calling the Device Manager function GetDCtlEntry. For more information about device control entries and how the Device Manager uses them, see the chapter “Device Manager” in the Inside Macintosh: <italics\>Devices. 
  1185. ASSEMBLY LANGUAGE INFORMATION
  1186. The routine selector for the PrDrvrDCE function is $94000000. 
  1187. Trap macro        Trap
  1188. _PrGlue        $A8FD
  1189. 1PrDrvrVers   
  1190. PrDrvrVers returns the version number of the printer driver in the system resource file.   
  1191. FUNCTION PrDrvrVers: Integer;
  1192. DESCRIPTION
  1193. The version number of the printer driver is available as the predefined constant iPrRelease. You may want to compare the result of PrDrvrVers with iPrRelease to see if the printer driver in the resource file is the most recent version.  This is the only low-level printing function you may call from the high-level interface. 
  1194. ASSEMBLY LANGUAGE INFORMATION
  1195. The routine selector for the PrDrvrVers function is $9A000000. 
  1196. Trap macro        Trap
  1197. _PrGlue        $A8FD
  1198. Low-Level Control Calls
  1199. The PrCtlCall procedure calls the printer driver’s control routine. Instead of sending the low-level calls to the device driver, the PrCtlCall procedure converts the call into its high-level equivalent before execution. 
  1200. ASSEMBLY LANGUAGE INFORMATION
  1201. The routine selector for the PrCtlCall procedure is $A0000E00. 
  1202. Trap macro        Trap
  1203. _PrGlue        $A8FD
  1204. 1PrCtlCall With the iPrBitsCtl Control Constant   
  1205. You can use the PrCtlCall procedure with the iPrBitsCtl control constant when you want to print bitmaps. 
  1206. PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; 
  1207.                                         lParam2: LongInt; lParam3: LongInt);
  1208. iWhichCtl    The constant iPrBitsCtl. This constant allows you to send all or part of a QuickDraw bitmap directly to the printer.
  1209. lParam1    A pointer to the QuickDraw bitmap.
  1210. lParam2    A pointer to the rectangle you want to print.
  1211. lParam3    The type of resolution used to print the bitmap. The LaserWriter printer driver ignores this flag. This parameter can have one of the following values:
  1212. Constant        Value    Description
  1213. lScreenBits        $00000000    The resolution is 80 ¥ 72.
  1214. lPaintBits        $00000001    The resolution is 72 ¥ 72.
  1215. lHiScreenBits        $00000002    The resolution is 160 ¥ 144.
  1216. lHiPaintBits        $00000003    The resolution is 144 ¥ 144.
  1217. 1PrCtlCall With the iPrIOCtl Control Constant   
  1218. You can use the PrCtlCall procedure with the iPrIOCtl control constant when you want text streaming in your application. Text streaming is useful for fast printing of text when speed is more important than visual fidelity or formatting. It makes no use of QuickDraw. 
  1219. PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; 
  1220.                                         lParam2: LongInt; lParam3: LongInt);
  1221. iWhichCtl    The constant iPrIOCtl. This constant causes text streaming to occur.  
  1222. lParam1    A pointer to the beginning of the text. 
  1223. lParam2    The number of bytes to transfer. The high-order word must be 0. 
  1224. lParam3    This should be 0. 
  1225. 1PrCtlCall With the iPrEvtCtl Control Constant  
  1226. You can use the PrCtlCall procedure with the iPrEvtCtl control constant for printing the screen or the topmost window on an ImageWriter printer. The LaserWriter printer driver does not support this call. 
  1227. PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; 
  1228.                                         lParam2: LongInt; lParam3: LongInt);
  1229. iWhichCtl    The constant iPrEvtCtl. This constant prints the object you have selected using the lParam1 parameter.  
  1230. lParam1    This parameter selects the object to be printed. If this value is $00000000, you want to print the screen. If this value is $00010000, you want to print the topmost window. 
  1231. lParam2    This should be NIL. 
  1232. lParam3    This should be NIL. 
  1233. 1PrCtlCall with the iPrDevCtl Control Constant  
  1234. You can use the PrCtlCall procedure with the iPrDevCtl control constant for controlling the printer device.
  1235. PROCEDURE PrCtlCall(iWhichCtl: Integer;lParam1: LongInt;lParam2: LongInt; lParam3: LongInt);
  1236. iWhichCtl    The constant iPrDevCtl. 
  1237. lParam1    The action you want to take.  The values possible for this parameter are listed below. 
  1238. lParam2    This should be NIL. 
  1239. lParam3    This should be NIL. 
  1240. DESCRIPTION
  1241. You can specify the following values for the lParam1 parameter:
  1242. Constant    Value    Description
  1243. lPrDocOpen    $00010000    Opens the document.This is similar to the high-level call 
  1244.         PrOpenDoc and should be followed with a call to PrCtlCall 
  1245.         with the iPrDevCtl control call and a param1 value of 
  1246.         lPrDocClose. 
  1247. lPrReset    $00010000    Reserved by Apple.
  1248. lPrPageClose    $00020000    Closes the page. This is similar to the high-level call 
  1249.         PrClosePage and should follow a call to PrCtlCall 
  1250.         with the iPrDevCtl control call and a param1 value of 
  1251.         lPrPageOpen. 
  1252. lPrPageEnd    $00020000    Reserved by Apple. 
  1253. lPrLineFeed    $00030000    Paper advance.  
  1254. lPrLFStd    $0003FFFF    Carriage return with line feed. The ImageWriter printer driver 
  1255.         causes a carriage return plus a paper feed of 1/6th of an inch. 
  1256.         The LaserWriter printer driver moves the pen location down 
  1257.         the page. 
  1258. lPrPageOpen    $00040000    Opens the page for printing. This is similar to the high-level call 
  1259.         PrOpenPage and should be followed with a call to PrCtlCall 
  1260.         with the iPrDevCtl control call and a param1 value of 
  1261.         lPrPageClose. 
  1262. lPrDocClose    $00050000    Closes the document. This is similar to the high-level call 
  1263.         PrCloseDoc and should follow a call to PrCtlCall with the 
  1264.         iPrDevCtl control call and a param1 value of lPrDocOpen. 
  1265. Summary
  1266. Constants
  1267. CONST
  1268.     iPFMaxPgs = 128;
  1269.     iPrPgFract = 120;         
  1270.         {Page scale factor. ptPgSize (below) is in units of 1/iPrPgFract}
  1271.     iPrPgFst = 1;                                 {Page range constants}
  1272.     iPrPgMax = 9999;
  1273.     iPrRelease = 3;                                 {Current version number of the code.}
  1274.     iPrSavPFil = -1;
  1275.     iPrAbort = $0080;
  1276.     iPrDevCtl = 7;                                 {The PrDevCtl proc's ctl number}
  1277.     lPrReset = $00010000;                                {The PrDevCtl proc's CParam for reset}
  1278.     lPrLineFeed = $00030000;
  1279.     lPrLFStd = $0003FFFF;                                {The PrDevCtl proc's CParam for std paper advance}
  1280.     lPrLFSixth = $0003FFFF;
  1281.     lPrPageEnd = $00020000;                                {The PrDevCtl proc's CParam for end page}
  1282.     lPrDocOpen = $00010000;
  1283.     lPrPageOpen = $00040000;
  1284.     lPrPageClose = $00020000;
  1285.     lPrDocClose = $00050000;
  1286.     iFMgrCtl = 8;                                 {The File Mgr's tail-hook Proc's ctl number}
  1287.     iMemFullErr = -108;
  1288.     iIOAbort = -27;
  1289.     pPrGlobals = $00000944;                                {The PrVars low memory area}
  1290.     bDraftLoop = 0;
  1291.     bSpoolLoop = 1;
  1292.     bUser1Loop = 2;
  1293.     bUser2Loop = 3;
  1294.     iPrBitsCtl = 4;
  1295.     lScreenBits = 0;
  1296.     lPaintBits = 1;
  1297.     lHiScreenBits = $00000002;                                    {The Bitmap Print proc's Screen Bitmap param}
  1298.     lHiPaintBits = $00000003;                                     {The Bitmap Print proc's Paint [sq pix] param}
  1299.     iPrIOCtl = 5;
  1300.     iPrEvtCtl = 6;                                    {The PrEvent proc's ctl number}
  1301.     lPrEvtAll = $0002FFFD; 
  1302.         {The PrEvent Proc's CParam for the entire screen}
  1303.     lPrEvtTop = $0001FFFD; 
  1304.         {The PrEvent Proc's CParam for the top folder}
  1305.     iPrDrvrRef = -3;
  1306.     getRslDataOp = 4;
  1307.     setRslOp = 5;
  1308.     draftBitsOp = 6;
  1309.     noDraftBitsOp = 7;
  1310.     getRotnOp = 8;
  1311.     NoSuchRsl = 1;
  1312.     RgType1 = 1;
  1313. Data Types
  1314. TYPE TFeed = (feedCut,feedFanfold,feedMechCut,feedOther);
  1315.     TScan = (scanTB,scanBT,scanLR,scanRL);
  1316.     TPRect = ^Rect;             { A Rect Ptr }
  1317.     PrIdleProcPtr = ProcPtr;
  1318.     PItemProcPtr = ProcPtr;
  1319.     TPPrPort = ^TPrPort;
  1320.     TPrPort = RECORD
  1321.         gPort:                 GrafPort;                {The Printer's graf port.}
  1322.         gProcs:                 QDProcs;                {..and its procs}
  1323.         lGParam1:                LongInt;
  1324.             {16 bytes for private parameter storage.}
  1325.         lGParam2:                LongInt;
  1326.         lGParam3:                LongInt;
  1327.         lGParam4:                LongInt;
  1328.         fOurPtr:                Boolean;
  1329.             {Whether the PrPort allocation was done by us.}
  1330.         fOurBits:                Boolean;
  1331.             {Whether the BitMap allocation was done by us.}
  1332.         END;
  1333.     TPPrInfo = ^TPrInfo;
  1334.     TPrInfo = RECORD
  1335.         iDev:            Integer;
  1336.         {Font Mgr/QuickDraw device code}
  1337.         iVRes:            Integer;
  1338.             {Resolution of device, in device coordinates}
  1339.         iHRes:            Integer;
  1340.             {..note: V before H => compatable with Point.}
  1341.         rPage:            Rect;
  1342.             {The page (printable) rectangle in device coordinates.}
  1343.     END;
  1344.     TPPrStl = ^TPrStl;
  1345.     TPrStl = RECORD
  1346.         wDev:            Integer;
  1347.         iPageV:            Integer;
  1348.         iPageH:            Integer;
  1349.         bPort:            SignedByte;
  1350.         feed:            TFeed;
  1351.     END;
  1352. TPPrJob = ^TPrJob;
  1353. TPrJob = RECORD
  1354.     iFstPage:                Integer;      {Page range}
  1355.     iLstPage:                Integer;
  1356.     iCopies:                Integer;       {Number of copies.}
  1357.     bJDocLoop:                SignedByte;
  1358.     {The printing method: immediate or spooled}
  1359.     fFromUsr:                Boolean;
  1360.     {Printing from an user's app (not PrApp) flag}
  1361.     pIdleProc:                PrIdleProcPtr;
  1362.     {The proc called while application sends document to printer}
  1363.     pFileName:                StringPtr;             {Spool filename: NIL for default.}
  1364.     iFileVol:                Integer;      {Spool file vol, set to 0 initially}
  1365.     bFileVers:                SignedByte;
  1366.     {Spool file version, set to 0 initially}
  1367.     bJobX:                SignedByte;      {An extra byte.}
  1368.     END;
  1369. TPPrint = ^TPrint;
  1370. THPrint = ^TPPrint;
  1371. TPrint = RECORD
  1372.     iPrVersion:                Integer;            {(2) Printing software version}
  1373.     prInfo:                TPrInfo;            {the printer information subrecord}
  1374.     rPaper:                Rect;            {the paper rectangle [offset from rPage]}
  1375.     prStl:                TPrStl;            {information from the style dialog box}
  1376.     prInfoPT:                TPrInfo;      {(14)  Print Time Imaging metrics}
  1377.     prXInfo:                TPrXInfo;{Reserved}
  1378.     prJob:                TPrJob;            {information from the job dialog box}
  1379.     printX:                ARRAY [1..19] OF Integer; {Reserved}
  1380.     END;
  1381. { The universal 120 byte printing record }
  1382. TPPrStatus = ^TPrStatus;
  1383. TPrStatus = RECORD
  1384.     iTotPages:                Integer;    {Total pages in Print File.}
  1385.     iCurPage:                Integer;         {Current page number}
  1386.     iTotCopies:                Integer;    {Total copies requested}
  1387.     iCurCopy:                Integer;    {Current copy number}
  1388.     iTotBands:                Integer;    {Total bands per page.}
  1389.     iCurBand:                Integer;    {Current band number}
  1390.     fPgDirty:                Boolean;    {True if current page has been written to.}
  1391.     fImaging:                Boolean;    {Set while in band's DrawPic call.}
  1392.     hPrint:                THPrint;    {Handle to the active Printer record}
  1393.     pPrPort:                TPPrPort;    {Ptr to the active PrPort}
  1394.     hPic:                PicHandle;    {Handle to the active Picture}
  1395.     END;
  1396. { PicFile = a TPfHeader followed by n QuickDraw Pics (whose PicSize is invalid!) }
  1397. TPPrDlg = ^TPrDlg;
  1398. TPrDlg = RECORD
  1399.     Dlg:                DialogRecord;                             {Ptr to the dialog box}
  1400.     pFltrProc:                ModalFilterProcPtr;                            {The dialog event filter}
  1401.     pItemProc:                PItemProcPtr;                            {The Item evaluating proc.}
  1402.     hPrintUsr:                THPrint;                            {The print record}
  1403.     fDoIt:                Boolean;                            {Dialog box confirmed}
  1404.     fDone:                Boolean;                            {User’s interaction completed}
  1405.     lUser1:                LongInt;                            {Storage for your application}
  1406.     lUser2:                LongInt;                            {Storage for your application}
  1407.     lUser3:                LongInt;                            {Storage for your application}
  1408.     lUser4:                LongInt;                            {Storage for your application}
  1409.     END;
  1410. PDlgInitProcPtr = ProcPtr;
  1411. TGnlData = RECORD
  1412.     iOpCode:                Integer;
  1413.     iError:                Integer;
  1414.     lReserved:                LongInt;     {more fields here depending on call}
  1415.     END;
  1416. TGetRslBlk = RECORD
  1417.     iOpCode:                Integer;
  1418.     iError:                Integer;
  1419.     lReserved:                LongInt;
  1420.     iRgType:                Integer;
  1421.     xRslRg:                TRslRg;
  1422.     yRslRg:                TRslRg;
  1423.     iRslRecCnt:                Integer;
  1424.     rgRslRec:                ARRAY [1..27] OF TRslRec;
  1425.     END;
  1426. TRslRg = RECORD
  1427.     iMin:    Integer;
  1428.     iMax:    Integer;
  1429.     END;
  1430. TRslRec = RECORD
  1431.     iXRsl:    Integer;
  1432.     iYRsl:    Integer;
  1433.     END;
  1434. TSetRslBlk = RECORD
  1435.     iOpCode:                Integer;
  1436.     iError:                Integer;
  1437.     lReserved:                LongInt;
  1438.     hPrint:                THPrint;
  1439.     iXRsl:                Integer;
  1440.     iYRsl:                Integer;
  1441.     END;
  1442. TDftBitsBlk = RECORD
  1443.     iOpCode:                Integer;
  1444.     iError:                Integer;
  1445.     lReserved:                LongInt;
  1446.     hPrint:                THPrint;
  1447.     END;
  1448. TGetRotnBlk = RECORD
  1449.     iOpCode:                Integer;
  1450.     iError:                Integer;
  1451.     lReserved:                LongInt;
  1452.     hPrint:                THPrint;
  1453.     fLandscape:                Boolean;
  1454.     bXtra:                SignedByte;
  1455.     END;
  1456. Routines
  1457. Opening and Closing the Printing Manager
  1458. PROCEDURE PrOpen;
  1459. PROCEDURE PrClose;
  1460. Filling and Verifying Print Records 
  1461. PROCEDURE PrintDefault    (hPrint: THPrint);
  1462. FUNCTION PrValidate    (hPrint: THPrint): Boolean;
  1463. Displaying and Customizing the Printing Dialog Boxes 
  1464. FUNCTION PrStlDialog    (hPrint: THPrint): Boolean;
  1465. FUNCTION PrJobDialog    (hPrint: THPrint): Boolean;
  1466. FUNCTION PrDlgMain    (hPrint: THPrint; pDlgInit: PDlgInitProcPtr): Boolean;
  1467. FUNCTION PrStlInit    (hPrint: THPrint): TPPrDlg;
  1468. FUNCTION PrJobInit    (hPrint: THPrint): TPPrDlg;
  1469. PROCEDURE PrJobMerge    (hPrintSrc: THPrint; hPrintDst: THPrint);
  1470. Printing
  1471. FUNCTION PrOpenDoc    (hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: Ptr): TPPrPort;
  1472. PROCEDURE PrCloseDoc    (pPrPort: TPPrPort);
  1473. PROCEDURE PrOpenPage    (pPrPort: TPPrPort; pPageFrame: TPRect);
  1474. PROCEDURE PrClosePage    (pPrPort: TPPrPort);
  1475. PROCEDURE PrPicFile    (hPrint: THPrint;pPrPort: TPPrPort; pIOBuf: Ptr; pDevBuf: Ptr; VAR prStatus: TPrStatus);
  1476. Optimizing Printing
  1477. PROCEDURE PrGeneral    (pData: Ptr);
  1478. Error Handling
  1479. FUNCTION PrError: INTEGER;
  1480. PROCEDURE PrSetError    (iErr: INTEGER);
  1481. Low-Level Routines
  1482. PROCEDURE PrDrvrOpen;
  1483. PROCEDURE PrDrvrClose;
  1484. FUNCTION PrDrvrDCE: Handle;
  1485. FUNCTION PrDrvrVers: INTEGER;
  1486. Low-Level Control Calls
  1487. PROCEDURE PrCtlCall    (iWhichCtl: INTEGER;lParam1: LONGINT;lParam2: LONGINT; lParam3: LONGINT);
  1488. Assembly-Language Information
  1489. Trap Macros Requiring Routine Selectors
  1490. _PrGlue
  1491. Selector    Routine
  1492. $C8000000    PrOpen
  1493. $D0000000    PrClose
  1494. $20040480    PrintDefault
  1495. $52040498    PrValidate
  1496. $2A040484    PrStlDialog
  1497. $32040488    PrJobDialog
  1498. $4A040894    PrDlgMain
  1499. $3C04040C    PrStlInit
  1500. $44040410    PrJobInit
  1501. $5804089C    PrJobMerge
  1502. $04000C00    PrOpenDoc
  1503. $08000484    PrCloseDoc
  1504. $10000808    PrOpenPage
  1505. $1800040C    PrClosePage
  1506. $60051480    PrPicFile
  1507. $BA000000    PrError
  1508. $C0000200    PrSetError
  1509. $70070480    PrGeneral
  1510. $94000000    PrDrvrDCE
  1511. $9A000000    PrDrvrVers
  1512. $80000000    PrDrvrOpen
  1513. $88000000    PrDrvrClose
  1514. $A0000E00    PrCtlCall
  1515. Index
  1516. B
  1517. background procedure
  1518. writing25 to 26
  1519. D
  1520. deferred printing4
  1521. dialog event filters
  1522. Printing Manager23
  1523. discrete resolution5
  1524. dots per inch5
  1525. draft printing, See immediate printing
  1526. draft-quality printing4
  1527. H
  1528. high-quality printing4
  1529. I
  1530. idle procedure9
  1531. definition8 to 9
  1532. immediate printing
  1533. J
  1534. job dialog box (for printing)7
  1535. job subrecord
  1536. P
  1537. page rectangle4
  1538. paper rectangle4
  1539. PrClose procedure40
  1540. PrCloseDoc procedure48
  1541. PrClosePage procedure49
  1542. PrCtlCall procedure
  1543. iPrBitsCtl control constant58
  1544. iPrDevCtl control constant60
  1545. iPrEvtCtl control constant59
  1546. iPrIOCtl control constant59
  1547. PrDlgMain function44
  1548. PrDrvrClose procedure57
  1549. PrDrvrDCE function57
  1550. PrDrvrOpen procedure56
  1551. PrDrvrVers function58
  1552. PrError function54
  1553. PrGeneral procedure51
  1554. DraftBitsOp opcode53
  1555. GetRotnOp opcode53
  1556. GetRslDataOp opcode51
  1557. NoDraftBitsOp opcode53
  1558. SetRslOp opcode52
  1559. print record7
  1560. job subrecord8
  1561. printer information subrecord8
  1562. PrintDefault procedure42
  1563. printer driver3
  1564. printer resource file3
  1565. printing grafPort6
  1566. Printing Manager
  1567. job dialog box7
  1568. style dialog box7
  1569. PrJobDialog function43
  1570. PrJobInit function45
  1571. PrJobMerge procedure46
  1572. PrOpen procedure40
  1573. PrOpenDoc function47
  1574. PrOpenPage procedure48
  1575. PrPicFile procedure50
  1576. PrSetError procedure56
  1577. PrStlDialog function43
  1578. PrStlInit function45
  1579. PrValidate function41
  1580. R
  1581. resolution of devices5
  1582. S
  1583. spool file4
  1584. spool printing See deferred printing4
  1585. style dialog box (for printing)7
  1586. T
  1587. TDftBitsBlk data type38
  1588. TGetRotnBlk data type38
  1589. TGetRslBlk data type35
  1590. TGnlData data type35
  1591. .See also PrGeneral procedure35
  1592. TPrDlg data type39
  1593. TPrInfo data type31
  1594. TPrint data type30
  1595. .See also print record
  1596. TPrJob data type31
  1597. .See also job subrecord
  1598. TPrStatus data type33
  1599. TPrStl data type33
  1600. TSetRslBlk data type37
  1601. V
  1602. variable resolution5
  1603. ñ@ˇ ˇˇˇˇ@
  1604. ˇ·ˇ‚7^, Palatino
  1605. .Ä(*
  1606. 4^Hÿ
  1607. ˇˇ≥>ˇ◊°dONLNdƒHÂ.(›HInside Macintosh:
  1608. H    4H     H
  1609. ˇ·ˇ‚7^°dONLNd‰Hµ* Imaging
  1610. à∫ÿ4à∫ÿ4üªË
  1611. °dONLNdˇˇ(ߪPreliminary Draft
  1612. ∂ª‘4∂ª”4πª–l
  1613.     °dONLNdˇˇ* Developer TÎ@°dONLNdˇˇ)0echnical Publications°dONLNdˇˇ(Àª© $P°dONLNdˇˇ)    Apple ComputerZ†°dONLNdˇˇ)C , Inc. 1992
  1614. à∫ÿ
  1615. ÄQ°dONLNdˇˇ(öªˇ™@ˇ ˇˇˇˇ@
  1616. ˇ·ˇ‚7^
  1617. 4⁄`˙º4^*¿∫, Palatino
  1618. .°dONLNd\*h1+*ee‡°dONLNd\2hï)Apple Computer, Inc. °dONLNdz*Ü≠(É*© 1991, Apple Computer, Inc.°dONLNd5Ñ*ê*
  1619. All rights reserved.°dONLNdJì*ü±* Printed in the United States of °dONLNdkù*©R*
  1620. America.°dONLNdt¨*∏±*The Apple logo is a registered °dONLNdì∂*¬∂*
  1621. trademark of Apple Computer, °dONLNd∞¿*â*
  1622. Inc. Use of the “keyboard” °dONLNdà*÷∏*
  1623.  Apple logo (Option-Shift-K) for °dONLNdÏ‘*‡∞*
  1624. commercial purposes without °dONLNdfi*Í•*
  1625. the prior written consent of ˇˇN∑°dONLNd&Ë*Ùπ*
  1626. Apple may constitute trademark °dONLNdEÚ*˛∏*
  1627. infringement and unfair compe-°dONLNdc¸*π*
  1628. #tition in violation of federal and °dONLNdÜ*X*
  1629. state laws.°dONLNdí*!ç*Apple Computer, Inc. °dONLNd®*+í*
  1630. 20525 Mariani Avenue  °dONLNdø)*5†*
  1631. Cupertino, CA  95014-6299°dONLNdŸ3*?g*
  1632. 408-996-1010  °dONLNdËB*N≥*Apple, the Apple logo, APDA, °dONLNdL*Xò*
  1633. AppleLink, AppleShare, °dONLNdV*bÇ*
  1634. AppleTalk, Apple II
  1635. P@°dONLNd0XÉaå)YGS
  1636. ù°dONLNd2Vçb≥)
  1637. , A/UX, °dONLNd:`*l≤(i*EtherTalk, HyperCard, Hyper-°dONLNdVj*vπ*
  1638.  Talk, ImageWriter, LaserWriter, °dONLNdvt*Ä•*
  1639. LocalTalk, Mac, Macintosh, °dONLNdë~*ä∑*
  1640. MPW, MultiFinder, SANE, and °dONLNd≠à*îµ*
  1641. TokenTalk are registered trade-°dONLNdÃí*û≥*
  1642. marks of Apple Computer, Inc.°dONLNdͰ*≠©*Apple Desktop Bus, Balloon °dONLNd´*∑≥*
  1643. Help, Finder, KanjiTalk, Moof, ˇˇÁ˰dONLNd$µ*¡π*
  1644. QuickDraw, ResEdit, TrueType, °dONLNdBø*Àµ*
  1645. and Zhong-Wen Talk are trade-°dONLNd_…*’≥*
  1646. marks of Apple Computer, Inc.°dONLNd}ÿ*‰ó*Helvetica and Times are °dONLNdñ‚*Óô*
  1647. registered trademarks of °dONLNd∞Ï*¯Ç*
  1648. Linotype Company.ˇˇ%~°dONLNd¬˚*π*"ITC Zapf Dingbats is a registered °dONLNd‰*¢*
  1649. trademark of International °dONLNdˇ*ç*
  1650. Typeface Corporation.°dONLNd**∞*MacPaint is a registered trade-°dONLNd4(*4§*
  1651. mark of Claris Corporation.°dONLNdP7*C¥*NuBus is a trademark of Texas °dONLNdoA*Mb*
  1652. Instruments.°dONLNd|P*\≥*!PostScript is a registered trade-°dONLNdùZ*fô*
  1653. mark, and Illustrator is a °dONLNdπd*pØ*
  1654. trademark, of Adobe Systems °dONLNd÷n*zf*
  1655.  
  1656. Incorporated.ˇˇ3√°dONLNd‰}*âπ*"Sony is a registered trademark of °dONLNdá*ì{*
  1657. Sony Corporation.°dONLNdñ*¢∑*UNIX is a registered trademark °dONLNd7†*¨∞*
  1658. of UNIX System Laboratories, °dONLNdT™*∂:*
  1659. Inc.4^…¿YˇˇÜW°dONLNdY\…hX(e… Simultaneously published in the °dONLNdyf…r>*
  1660. United States and Canada.°dONLNdìé…öJ*(Limited Warranty on Media °dONLNd≠ò…§*
  1661. and Replacement°dONLNdΩ©…µ3*Even though Apple has °dONLNd‘≥…ø.*
  1662. reviewed this manual, û‡°dONLNdÍ≥.øP)eAPPLE ˇˇ±°dONLNdΩ……S(Δ…MAKES NO WARRANTY OR ˇ˛ùǰdONLNd«…”S*
  1663. REPRESENTATION, EITHER °dONLNd—…›;*
  1664. EXPRESS OR IMPLIED, °dONLNd0€…ÁE*
  1665. WITH RESPECT TO THIS °dONLNdEÂ…ÒE*
  1666. MANUAL, ITS QUALITY, °dONLNdZÔ…˚I*
  1667. ACCURACY, MERCHANT-°dONLNdm˘…N*
  1668. ABILITY, OR FITNESS FOR °dONLNdÖ…N*
  1669. A PARTICULAR PURPOSE. °dONLNdõ
  1670. …,*
  1671. AS A RESULT, THIS °dONLNdÆ…#<*
  1672. MANUAL IS SOLD “AS °dONLNd¬!…-C*
  1673. IS,” AND YOU, THE PUR-°dONLNdÿ+…7M*
  1674. CHASER, ARE ASSUMING °dONLNdÌ5…AF*
  1675. THE ENTIRE RISK AS TO °dONLNd?…K(*
  1676. ITS QUALITY AND °dONLNdI…U *
  1677. ACCURACY.  °dONLNd Z…fO*IN NO EVENT WILL APPLE °dONLNd7d…pC*
  1678. BE LIABLE FOR DIRECT, °dONLNdNn…z1*
  1679. INDIRECT, SPECIAL, °dONLNdbx…ÑJ*
  1680. INCIDENTAL, OR CONSE-°dONLNdwÇ…é;*
  1681. QUENTIAL DAMAGES °dONLNdâå…òB*
  1682. RESULTING FROM ANY °dONLNdùñ…¢O*
  1683. DEFECT OR INACCURACY °dONLNd≤†…¨'*
  1684. IN THIS MANUAL, {†°dONLNd¬†(¨H)_even if °dONLNd ™…∂E(≥…advised of the possibility of °dONLNdË¥…¿*
  1685. such damages.  °dONLNd¯≈…—;*THE WARRANTY AND °dONLNd    œ…€=*
  1686. REMEDIES SET FORTH °dONLNdŸ…ÂD*
  1687. ABOVE ARE EXCLUSIVE °dONLNd0„…Ô3*
  1688. AND IN LIEU OF ALL °dONLNdDÌ…˘**
  1689. OTHERS, ORAL OR °dONLNdU˜…?*
  1690. WRITTEN, EXPRESS OR °dONLNdj…
  1691. ˙*
  1692.     IMPLIED. Ó`°dONLNds˙
  1693. H)1No Apple dealer, °dONLNdÑ …)(…agent, or employee is °dONLNdõ…!4*
  1694. authorized to make any °dONLNd≥…+A*
  1695. modification, extension, or °dONLNd–)…5?*
  1696. addition to this warranty.  °dONLNdÌ:…FI*Some states do not allow the °dONLNd    
  1697. D…P:*
  1698. exclusion or limitation of °dONLNd    &N…ZO*
  1699.  implied warranties or liability °dONLNd    FX…dR*
  1700.  for incidental or consequential °dONLNd    fb…n/*
  1701. damages, so the above ˇˇpr°dONLNd    }l…xS*
  1702.  limitation or exclusion may not °dONLNd    ùv…ÇG*
  1703. apply to you. This warranty °dONLNd    πÄ…åP*
  1704. !gives you specific legal rights, °dONLNd    ⁄ä…ñK*
  1705. and you may also have other ˇˇ‘Ô°dONLNd    ˆî…†S*
  1706.  rights which vary from state to °dONLNd
  1707. û…™‡*
  1708. state.4^h¿¯ˇÜ@ˇ ˇˇˇˇ@
  1709. ˇ·ˇ‚7^
  1710. 4⁄∫˙,     Helvetica
  1711.     .(‡∫Contents
  1712. 
  1713. ‡(‡1ù)-‡)1
  1714. (Ô∫Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/92, Palatino
  1715.         (#∫CHAPTER )~1
  1716. ~H-4~H- H
  1717. °dONLNdˇˇ('∫Contents
  1718. ˇ·ˇ‚7^
  1719. ˇˇf|ˇÆ°dONLNdˇˇ(t∫The Printing Manager
  1720. °dONLNdˇˇ*—Intr∑@°dONLNdˇˇ)oduction to Printing*†°dONLNdˇˇ)n2-3°dONLNdˇˇ(Rƒ!Methods and Qualities of Printing}¿°dONLNdˇˇ)´2-4°dONLNdˇˇ(_ƒPage and Paper Rectanglesë@°dONLNdˇˇ)ã2-4°dONLNdˇˇ(lƒPrinter Resolution?‡°dONLNdˇˇ)e2-5°dONLNdˇˇ(y∫About the Printing ManageræÄ°dONLNdˇˇ)ë2-6°dONLNdˇˇ(܃The User9†°dONLNdˇˇ))’s Formatting InputR@°dONLNdˇˇ)j2-6°dONLNdˇˇ(ìƒThe Print RecorVİdONLNdˇˇ)Ed and the Printing Loop܇°dONLNdˇˇ)~2-7°dONLNdˇˇ(†ƒ The Idle Pr6†°dONLNdˇˇ)1ocedurÕ‡°dONLNdˇˇ)eóİdONLNdˇˇ)2-8°dONLNdˇˇ(≠∫Using the Printing Manager˝¿°dONLNdˇˇ)è2-9°dONLNdˇˇ(∫ƒCr\°dONLNdˇˇ)  eating and Using the Print Recorc@°dONLNdˇˇ)êd°dONLNdˇˇ)2-9°dONLNdˇˇ(«ƒPrinting a Document¿°dONLNdˇˇ)q2-10°dONLNdˇˇ(‘Œ Printing Frï`°dONLNdˇˇ)0
  1721. om the Finder› °dONLNdˇˇ)R2-15°dONLNdˇˇ(·Œ)Printing Each Page as a Separate Document#†°dONLNdˇˇ)’2-15°dONLNdˇˇ(ÓŒ Printing Frï`°dONLNdˇˇ)0om the Low-Level Interfacer@°dONLNdˇˇ)é2-16°dONLNdˇˇ(˚ƒChecking for PrGeneral@°dONLNdˇˇ)}2-16°dONLNdˇˇ(ƒ&Determining the Resolution of the CurrA@°dONLNdˇˇ)Æ ent PrinterS@°dONLNdˇˇ)C2-17°dONLNdˇˇ(ƒDetermining Page OrientationD`°dONLNdˇˇ)ö2-20°dONLNdˇˇ("ƒChoosing Draft-Quality Printing9¿°dONLNdˇˇ)§2-21°dONLNdˇˇ(/ƒ$Altering the Style or Job Dialog Box`°dONLNdˇˇ)≤2-23°dONLNdˇˇ(<ƒW¬†°dONLNdˇˇ)    riting an Idle Pru °dONLNdˇˇ)Focedur `°dONLNdˇˇ)e÷°dONLNdˇˇ)2-25°dONLNdˇˇ(IƒOptimizing PrintingO@°dONLNdˇˇ)n2-26°dONLNdˇˇ(VƒOptimizing PostScript Printingù@°dONLNdˇˇ)ù2-26°dONLNdˇˇ(cƒPrN†°dONLNdˇˇ)
  1722. (oviding Names of Documents Being PrintedŒ¿°dONLNdˇˇ)◊2-27°dONLNdˇˇ(pƒ$Canceling or Pausing the Printing Pr?İdONLNdˇˇ)¢ocessh‡°dONLNdˇˇ)+2-28°dONLNdˇˇ(}ƒHandling Printing Err`°dONLNdˇˇ)bors©Ä°dONLNdˇˇ)!2-28°dONLNdˇˇ(äŒUsing Ó¿°dONLNdˇˇ)#Alert or Dialog Boxes to Report Err¿°dONLNdˇˇ)úors¨‡°dONLNdˇˇ)!2-28°dONLNdˇˇ(óŒInterpru†°dONLNdˇˇ)eting PrGeneral Errz‡°dONLNdˇˇ)Vors °dONLNdˇˇ)"2-29°dONLNdˇˇ(§∫Refer⁄ °dONLNdˇˇ)enceذdONLNdˇˇ)(2-29°dONLNdˇˇ(±ƒData Str``°dONLNdˇˇ)$ucturÊ@°dONLNdˇˇ)esχ°dONLNdˇˇ)2-29°dONLNdˇˇ(æŒTPrint  ô °dONLNdˇˇ)52-30ˇp@ˇ ˇˇˇˇ@
  1723. ˇ·ˇ‚7^
  1724. 4*\˜, Palatino
  1725. .+ú"CHAPTER €`)\14⁄*˙¯,     Helvetica
  1726. (‡*1 )-c)2
  1727.     )iContents
  1728. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  1729. °dONLNdˇˇ(e∞TPrInfo @°dONLNdˇˇ)92-31°dONLNdˇˇ(r∞TPrJob n°dONLNdˇˇ)52-31°dONLNdˇˇ(∞TPrStl áİdONLNdˇˇ)22-33°dONLNdˇˇ(å∞
  1730. TPrStatus %†°dONLNdˇˇ)B2-33°dONLNdˇˇ(ô∞TPrPortQ °dONLNdˇˇ)72-34°dONLNdˇˇ(¶∞    TGnlData {@°dONLNdˇˇ)B2-35°dONLNdˇˇ(≥∞ TGetRslBlk 4İdONLNdˇˇ)I2-35°dONLNdˇˇ(¿∞ TSetRslBlk ” °dONLNdˇˇ)F2-37°dONLNdˇˇ(Õ∞ TDftBitsBlk ã°dONLNdˇˇ)J2-38°dONLNdˇˇ(⁄∞ TGetRotnBlk ò`°dONLNdˇˇ)P2-38°dONLNdˇˇ(Á∞TPrDlg Q¿°dONLNdˇˇ)72-39°dONLNdˇˇ(Ù¶Routines≠`°dONLNdˇˇ);2-40°dONLNdˇˇ(∞(Opening and Closing the Printing ManagerZ`°dONLNdˇˇ)‘2-40°dONLNdˇˇ(∞
  1731. Filling and V†°dONLNdˇˇ)9erifying Print Recor‡°dONLNdˇˇ)Wds^†°dONLNdˇˇ)2-41°dONLNdˇˇ(∞4Displaying and Customizing the Printing Dialog Boxesú@°dONLNdˇˇ(∑2-43°dONLNdˇˇ((∞Printing¡@°dONLNdˇˇ)82-47°dONLNdˇˇ(5∞Optimizing PrintingO@°dONLNdˇˇ)n2-51°dONLNdˇˇ(B∞ErrS`°dONLNdˇˇ) or Handling´@°dONLNdˇˇ)J2-54°dONLNdˇˇ(O∞Low-Level Routinesß °dONLNdˇˇ)m2-56°dONLNdˇˇ(\∞Low-Level Contrfl°dONLNdˇˇ)Kol Calls·†°dONLNdˇˇ)52-58°dONLNdˇˇ(iúSummary†°dONLNdˇˇ)?2-61ˇj@ˇ ˇˇˇˇ@
  1732. ˇ·ˇ‚7^
  1733. 4⁄*˙¯,     Helvetica
  1734. .(‡*1 )-c)3
  1735.     )9Introduction to Printing
  1736. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/92, Palatino("lCHAPTER )_1
  1737.     ˇˇ—ÚˇÆ°dONLNd8lCæ(@lThe Printing Managerˇˇˇˇˇˇ≠>(@Û1
  1738. °dONLNd\lh∑(elJThis chapter describes the theory behind and implementation of printing frİdONLNd_\∏hŸ(e∏om the °dONLNdfhlt (ql#Macintosh computer to any printer: ?°dONLNdâh t)†YˇÄ°dONLNdäht‰).our application draws a printed document on a °dONLNd∏tlÄE(}l2printer just as it draws an image on a monitor scra‡°dONLNdÍtEÄÂ)Ÿ$een. This manner of printing allows °dONLNdÄlå(âlyou to use the same QuickDraw r†°dONLNd-ÄåÄ)îoutines for printing as for scr`°dONLNdLÄÅå≥)Å een displayѰdONLNdWÄ≤åÌ)1. The chapter °dONLNdeålò˜(ïl[also describes what your application needs to do to allow the user to print on any type of °dONLNd¿òl§F* 0printer and how you can optimize printing on difÿ‡°dONLNdòF§R)⁄ferª`°dONLNdÛòR§≠) ent types of printers.°dONLNd
  1739. ™l∂r(≥lY@İdONLNd ™r∂‹)Tou should use this chapter if you want your application to allow the user to print. °dONLNd`ºl»É(≈lBeforÛ¿°dONLNdeºÉ»é)e r`°dONLNdhºè»„) eading this chapterÓ¿°dONLNd{º‚»Œ)S3, you should be familiar with QuickDraw’s drawing r ¿°dONLNdƺŒ»)Ïoutines .°dONLNd∂»l‘ë(—land the ,
  1740. Courier°dONLNdæ»ë‘¡)%grafPort°dONLNdΔ»¡‘ı)0  data type. R`°dONLNd“»ı‘¸)4Yg`°dONLNd”»˚‘X)ou may also need to r9¿°dONLNdË»X‘â)] efer to the .9¿°dONLNd˛»â‘í)1Ww`°dONLNdˇ»í‘◊)    orldwide Softwarn`°dONLNd»◊‘⁄)Ee.R°dONLNd»€‘›) .°dONLNd‘l‡3(›l-volume for information about printing text fr∞İdONLNd>‘3‡ª)«om non-Roman script systems.°dONLNd[ÊlÚ∂(ÔlLThis chapter begins with a description of the elements of the printing envir≈`°dONLNdßÊ∂Úfl(Ô∂    onment:  °dONLNd∞Úl˛€(˚lXtypes of printing, page characteristics, and printer characteristics. Then it describes ,
  1741.  
  1742. Zapf Dingbats
  1743. °dONLNd    lq*n
  1744. °dONLNd x“) printing a document
  1745. °dONLNdl q(ln
  1746. °dONLNd!x"
  1747. ) optimizing printing performance
  1748. °dONLNdA+l2q(1ln
  1749. °dONLNdC(x4’) handling printing err*¿°dONLNdX(÷4„)^ors
  1750. °dONLNd\=lDq(Cln
  1751. °dONLNd^:xF≠) using picturˆ@°dONLNdj:≠F·)5
  1752. e comments°dONLNduLlX$(Ul(For further information about the LaserWK‡°dONLNdùL$X◊)∏+riter printer and how it operates, see the °dONLNd»Xldã(alLaserWg‡°dONLNdŒXãd¥) riter Referù‡°dONLNdŸX¥d≈))ence °dONLNd›XΔd), published by ‡°dONLNdÏXd:)A    Addison-WÁ¿°dONLNdıX9dO)2esley¿°dONLNd˙XOdŒ). For information about how °dONLNddlp˘(mlPostScript works and the specifi‡°dONLNd6d˙pñ)é#cs of PostScript commands, see the <°dONLNdYdñpÏ)úPostScript Language °dONLNdmpl|Å(ylReferp°dONLNdrpÅ|µ) ence ManualéİdONLNd}pµ|
  1753. )4, also published by ∑ °dONLNdëp
  1754. |=)U    Addison-Wã°dONLNdöp=|S)3esley∑°dONLNdüpR|W). 
  1755. Å*ú¯4Ç*ú¯
  1756. ≠*µ¯4Æ*µ¯ Æ*Æ˛
  1757. ˇ·ˇ‚7^
  1758. ˇˇ£‰ˇÆ°dONLNd¢ö*¨’(®*Introduction to Printingˇˇˇˇˇˇ⁄|(®Ó1
  1759. °dONLNdªΩl…Å(ΔlIn orj`°dONLNd¿ΩÅ…î)Ader for your application to print, it sends an image to a printerΔ°dONLNdΩì…Ô(Δì, taking into account °dONLNd…l’ñ(“l
  1760. the featur    `°dONLNd!…ó’‹)+es the printer of∂@°dONLNd2…‹’Ì)EAfers, how the printer prints, and the size of the paper the user °dONLNds’l·ã(filwants. ˙ °dONLNdz’ã·ë)Y∫†°dONLNd{’ë·Á)Nour application doesn’t have to know the kind of printer the user has chosen, °dONLNd…·lÌ (Íl$because you call the same printing rR¿°dONLNdÌ· Ì4)ü
  1761. outines, ró °dONLNd˜·4ÌG))egar¥‡°dONLNd˚·G̪)dless of the type of printery¿°dONLNd·ªÌ‹)t. These °dONLNdÌl˘o(ˆlrE°dONLNd Ìp˘õ)
  1762. outines ar    `°dONLNd*Ìú˘_),.e translated into actual printing code by the 3@°dONLNdXÌ_˘∞)√printer resource fiH °dONLNdkÌ∞˘∫)Qle,°dONLNdn̪˘Ú)
  1763.  which is on °dONLNd{˘lè(lthe userõ °dONLNdɢêt)$6’s system. (Each type of printer has its own printer rS†°dONLNdπ˘uç)Âesourõ‡°dONLNdæ˘çû)ce fibİdONLNd√˘ü„)le.) The printer °dONLNd‘lo(lrE°dONLNd’pà)esourç@°dONLNd⁄àô)ce fiS‡°dONLNdflö
  1764. )le contains a device driver?‡°dONLNd˙
  1765. ?)s
  1766. , called the C†°dONLNd?|)2printer driver£Ä°dONLNd|~)=,#İdONLNdÓ) that takes the document °dONLNd/ls(lfrò‡°dONLNd1sW)3om the Printing Manager and sends it to the printer‡†°dONLNddV¿)„. One printer driver can °dONLNd}l)¬(&lKcommunicate with several printers of the same type; for example, the LaserW„†°dONLNd»¡)˜(&¡riter printer °dONLNd÷)l5(2l#driver can work with several LaserWÂ`°dONLNd˘)5ã)£riter printers on a network.  õ†°dONLNd    )å5é)} °dONLNd    ;lGr(DlY@İdONLNd    ;rG„)Sour application should be device-independent when it prints a document, so that it °dONLNd    mGlSí(Pl    doesn’t r7‡°dONLNd    vGìS)'ely on any one printer featurä°dONLNd    ìGS=)~
  1767. e being pr¥‡°dONLNd    ùG=S∂),esent. For instance, the curr‡‡°dONLNd    ∫G∂SÁ)y ent printer °dONLNd    ΔSl_È(\lthe user has selected may prg°dONLNd    ‚SÈ_)} oduce laserm@°dONLNd    ÌS_ı)22-quality or dot-matrix type, and your application °dONLNd
  1768. _lkù(hl should be r%`°dONLNd
  1769. *_ûkÊ)2Heady to handle both. The Printing Manager takes much of the work out of °dONLNd
  1770. rklwÜ(tl@coming up with a single way to handle all possible printer envir%İdONLNd
  1771. ≤káw€(táonments. HoweverÁ`°dONLNd
  1772. ¬k⁄wfl)S, °dONLNd
  1773. ƒwlÉ&(Äl(while you shouldn’t depend on any featur*@°dONLNd
  1774. Ïw'ÉS)ª
  1775. e being prU °dONLNd
  1776. ˆwSÉÄ), esent, ther€Ä°dONLNd wÄÉê)-e arÍ °dONLNd wêÉÎ)e a few things about °dONLNd Élè(ål$printers of which you should be awaré°dONLNd >ÉèÔ)¶2e and which you can use to optimize printing: the °dONLNd pèlõÒ(òlZmethod of printing the user wants, the size of the paper on which the user will print the °dONLNd  õlß≈* document, and the r…İdONLNd ›õ≈ß*)Yesolution of the printerΩ@°dONLNd ıõ*ß,)e.ˇæ@ˇ ˇˇˇˇ@
  1777. ˇ·ˇ‚7^
  1778. 4*\˜, Palatino
  1779. .+l"CHAPTER €`)\1,     Helvetica
  1780.     (@lThe Printing Manager4⁄*˙¯
  1781. (‡*1 )-c)4
  1782.     )9Introduction to Printing
  1783. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  1784. m*s¯4n*s¯ nln¯
  1785. ˇ·ˇ‚7^
  1786. ˇˇ◊ˇ◊°dONLNd\lmX(il!Methods and Qualities of Printingˇˇˇˇˇˇ®(i1
  1787. °dONLNd"slÄ(|lTher¿°dONLNd&sÅë)e ar`°dONLNd*sëµ)?e two basic methods of printing documents: immediate and deferrꆰdONLNdisµÿ(|µed. The °dONLNdqlãË(àlTPrinting Manager chooses which method to use by determining the capabilities of the °dONLNd≈ãló~* currذdONLNd…ã~ó)%ent printer and using the printing pr뇰dONLNdÓãó/)°efer>°dONLNdÚã0ó°)ences selected by the user◊†°dONLNd ã†óı)p.  The two printing °dONLNd ól£ù(†l
  1788. methods arD†°dONLNd*óû£˙)2e implemented in dify†°dONLNd>ó˙£)\fer\ °dONLNdAó£K) ent ways for dif√°dONLNdQóK£W)Efer•İdONLNdTóW£è) ent printers. °dONLNdc©lµ≈(≤lImmediate printing0°dONLNdu©ΔµÒ)ZD means that the document prints as your application draws it in the .°dONLNdπµl¡ì(æl    printing ,
  1789. Courier°dONLNd¬µì¡√)'grafPort°dONLNd µ√¡»)0. R`°dONLNdõ»¡œ)Yg`°dONLNdÕµŒ¡_)our QuickDraw drawing calls ar9¿°dONLNdε_¡¢)ëe converted dir  °dONLNd˙µ¢¡œ)C ectly into .°dONLNd¡lÕŒ( lMcommand codes the printer driver understands and uses to print the document.   °dONLNdR¡œÕ’( œYÀ†°dONLNdS¡‘ÕÂ)our °dONLNdWÕlŸì(÷lEprinting code, the data to be printed, and the printer driver code ar¿°dONLNdúÕîŸ≤(÷îe all prb@°dONLNd§Õ≤Ÿ÷)    esent in °dONLNd≠ŸlÂë(‚lmemoryÕ °dONLNd≥ŸêÂ9)$&. Immediate printing is also known as ‚¿°dONLNdŸŸ9Âp)©draft printing∂°dONLNdÁŸqÂx)8.  6°dONLNdÍŸyÂ{) °dONLNdÏÎl˜v(ÙlWÛ`°dONLNdÌÎu˜É)    ith oİdONLNdÒÎј”)deferred printingìİdONLNdΔ˜s)O%, the Printing Manager writes out a rC °dONLNd'Ît˜Ç)°epr”‡°dONLNd*ÎǘÕ)esentation of the °dONLNd<˜l(l$document’s printed image to a disk fiæÄ°dONLNda˜B)•
  1790. le (called a j¿°dONLNdn˜Cd)2spool fi†°dONLNdv˜em)"leXİdONLNdx˜mÓ)) or possibly to memory; this °dONLNdñlé( lBinformation is then converted into a bit image and printed. Deferr)`°dONLNdÿè‡( èed printing is also °dONLNdÏlô(l    known as ª`°dONLNdıô—)-spool printing´°dONLNd“Ÿ)9.  +°dONLNd⁄‹) 
  1791. (*5¯4)*4¯
  1792. °dONLNdˇˇ(0lNOTE
  1793. ˇ·ˇ‚7^
  1794. °dONLNd2l>* The internal format of spool fiˇ°dONLNd'2>ñ)Ñ'les is private to the Printing Manager °dONLNdN>lJ≥(Gland may vary frë °dONLNd]>≥J$)Gom one printer to another©†°dONLNdv>$J))q. |°dONLNdx>)J/)Y<İdONLNdy>/Jü)ou should not attempt to °dONLNdíJlV˜(Sldetermine the format of these fi•@°dONLNd≤J˜V")ã les or use ,
  1795.  
  1796. Zapf Dingbats
  1797. ä °dONLNdˇˇ)/u
  1798. ÿ °dONLNdˇˇ) °dONLNd”\lhÄ(elTher¿°dONLNd◊\Åhë)e ar`°dONLNd€\ëh°)@e also two qualities of printing: high-quality and draft-qualitye@°dONLNd\†h•(e†. e@°dONLNd\•h‚)
  1799. High-quality °dONLNd*hltë(qlprintingA†°dONLNd2hítû)& prà¿°dONLNd5hûtÍ) Loduces documents that use all of the fonts and formatting that the user has °dONLNdÅtlÄò(}l
  1800. included. ö†°dONLNdãtòĸ),Draft-quality printinga`°dONLNd°t˝Ä    )e pr®Ä°dONLNd§t    ÄÎ) 3oduces quick, low-quality drafts of text documents °dONLNd◊Älåà(âlthat ar °dONLNdfiÄâå#)#e printed straight down the page fr√°dONLNdÄ#åÁ)ö-om top to bottom and left to right. Generallyq`°dONLNd.ÄÁåÏ)ƒ, °dONLNd0ålò (ïl&only text is printed using the printerÖ‡°dONLNdVå
  1801. ò∞)°'’s internal fonts, without formatting.  °dONLNd}å±ò∂)§  
  1802. °dONLNdİl®q(ßln
  1803. °dONLNdÇûx™≠)
  1804. The LaserW`°dONLNdåû≠™Ì)5riter printer pra@°dONLNdúûÌ™Å)@!oduces only high-quality output. 
  1805. °dONLNdæ≥l∫q(πln
  1806. °dONLNd¿∞xº∞)
  1807. The ImageW↰dONLNd ∞∞º)8riter printer can prô °dONLNdfi∞ºfi)R2oduce high-quality or draft-quality output. Deferr%¿°dONLNd∞flºÏ)›ed °dONLNdºx»®(≈x printing pr‡°dONLNdº©»Î)1oduces standar¡†°dONLNd,ºÎ»ƒ)B1d or high-quality printing; immediate printing pr‡°dONLNd]º≈»Ê)⁄oduces °dONLNdd»x‘€(—xdraft-quality printing. 
  1808. ˙*¯4˙*ˇ¯ ˙l˙¯
  1809. ˇ·ˇ‚7^
  1810. ˇˇ◊ˇ◊°dONLNd}Ël˘&(ılPage and Paper Rectanglesˇˇˇˇˇˇ®(ı1
  1811. °dONLNdóˇl Ä(lTher¿°dONLNdõˇÅ ë)e ar`°dONLNdüˇë Ú)Pe two sizes to consider when printing a document: the physical size of the paper@°dONLNdÔˇÚ ˜(Ú, °dONLNdÒ lò(l
  1812. and the arİdONLNd˚ ôÙ)-Nea on the paper that the printer can use to format the document, which should °dONLNdIl#|( l>be smaller than the physical sheet of paper to account for mar~°dONLNdá|#ì( |gins. °dONLNdé)l5(2lThe ª¿°dONLNdí)5¿)page rectangleç °dONLNd†)¡5«)B r“ °dONLNd¢)«5’)eprb‡°dONLNd•)÷5Á)Aesents the boundaries of the printable page. Its top left corner °dONLNdÊ5lA¬(>lalways has the coorİdONLNd˘5√A!)Wdinates (0,0); the coor[`°dONLNd    5!Afi)^,dinates of the bottom right corner give the °dONLNd    <AlMà(Jl=maximum page height and width attainable on the given printer∂ °dONLNd    yAàM√(Jà, in dots. The <@°dONLNd    àAƒM‡)<paper °dONLNd    éMlYï(Vl    rectangle&İdONLNd    óMñY-)*# gives the physical paper size, defi*İdONLNd    ªM-Yà)óned in the same coors@°dONLNd    œMàY„)[dinate system as the °dONLNd    ‰Yleá(blpage r‡°dONLNd    ÍYàe)!ectangle. Thus, the top left coord¿°dONLNd
  1813. Yep)ädinates of the paper rØÄ°dONLNd
  1814. !Ype†)^ ectangle arÉ@°dONLNd
  1815. ,Y†e–)0 e typically °dONLNd
  1816. 8elq(nl"negative and its bottom right coorÉ °dONLNd
  1817. Zeq-)ñ
  1818. dinates arʆ°dONLNd
  1819. de-q=)+e grÑ`°dONLNd
  1820. he>qæ)eater than those of the page rà@°dONLNd
  1821. ÜeæqÁ)Ä
  1822. ectangle. °dONLNd
  1823. êql}É(zlThe rÄ¿°dONLNd
  1824. ïqÉ}È)elationship of the two r‡°dONLNd
  1825. ≠qÍ}J)gectangles is shown in o°dONLNd
  1826. √qJ}b)`FigurA¿°dONLNd
  1827. »qb}v)e 1-1fl@°dONLNd
  1828. Õqv}{). fl@°dONLNd
  1829. œq{}Ç)   _@°dONLNd
  1830. “qÉ}Ö) ˇjd@ˇ ˇˇˇˇ@
  1831. ˇ·ˇ‚7^
  1832. 4H\, Palatino
  1833. .+ä"CHAPTER €`)\1,     Helvetica
  1834.     (@äThe Printing Manager4⁄ä˙(‡äIntroduction to Printing
  1835. 
  1836. ‡(‡1ù)-‡)5
  1837. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  1838. gHw4gHw"gH_
  1839. ˇ·ˇ‚7^
  1840.     °dONLNdˇˇ(dä
  1841. Figure 1-1°dONLNd\Ãg:)BPage and paper rectangles 
  1842. @°dONLNd\;g=)o 
  1843. °dONLNdAäMê(JäY@İdONLNdAêMV),our application should always use the page rå@°dONLNdIAVMû)Δectangle sizes pr °dONLNdZAüMˇ)Iovided by the printer °dONLNdpMäY˚(VäRdriver and should not attempt to change them or add new ones. If your application °dONLNd¬Yäe3* &supports page size other than those pr{`°dONLNdËY3e„)©)ovided by the printer driver for the curr√İdONLNdY„eÛ)∞ent °dONLNdeäq®(näprintero¿°dONLNde®q), you risk compatibility prb†°dONLNd7eqT)s oblems with İdONLNdCeTq)9)Apple’s printer drivers and those of thir‰ °dONLNdleq
  1844. )∞d-°dONLNdnqä}Í(zäparty printer makers. °dONLNdÖÉäè4*&When formatting a page for printing, rfl†°dONLNd´É4èø)™emember that in general the scr
  1845. °dONLNd É¿è)åeen is wider than °dONLNd‹èäõΔ(òäit is tall, wherö@°dONLNdÏèΔõe)<(eas the page is taller than it is wide. ˙@°dONLNdèeõk)üY∫¿°dONLNdèkõ◊)ou should use the page rQİdONLNd-èÿõ)mectangle size °dONLNd;õäß
  1846. (§äthat the user has chosen in orE†°dONLNdYõ ßû)Å!der to format the document. (See Ê °dONLNdzõûßË)ì“The Print Recorº†°dONLNdäõËß)J
  1847. d and the °dONLNdîßä≥˝(∞äPrinting Loop” on page 1-ø¿°dONLNd≠ß˝≥)s7ø¿°dONLNdÆß≥%) for morä@°dONLNd∂ß&≥ó)$e information about wher凰dONLNdŒßó≥Ø)qe to fi °dONLNd’ß∞≥·) nd the user£`°dONLNd‡ß‚≥)2 ’s choices °dONLNdÎ≥äø(ºäfor formatting the document.) 
  1848. ‰HÍ4ÂHÍ ÂäÂ
  1849. ˇ·ˇ‚7^
  1850. ˇˇ◊ˇ◊°dONLNd
  1851. ”ä‰ *$Printer Resolution ˇˇˇˇˇˇ®(‡1
  1852. °dONLNdÍ䈪(Ûä
  1853. Resolutiony¿°dONLNd(ͺˆÏ)2  is the degr6°dONLNd4Í̈≈)13ee of clarity of your display device, whether a scr¸`°dONLNdgÍ≈ˆ)ÿeen or a printer8‡°dONLNdwÍ    ˆ)D. °dONLNdyˆäë(ˇäA∫†°dONLNdzˆëÎ) monitor has better rŒ°dONLNdèˆÎæ)Z1esolution than a television set used as a monitorÈ °dONLNd¿ˆæı)”, and a laser °dONLNdŒä‹( äprinter has better r¿°dONLNd‚›v)S#esolution than a dot-matrix printer`°dONLNdvˆ)ô. Resolution is usually specifiP@°dONLNd$ˆ)Äed in °dONLNd*ä≈(ä
  1854. dots per inchͰdONLNd7≈");, or dpi, in the X and ⁄İdONLNdN"()]YX`°dONLNdO)8) dir°Ä°dONLNdS8“)$ections. The higher the value, the fiC °dONLNdx”)õner the detail °dONLNdáä&≈(#äof the image. ;‡°dONLNdïΔ&»)< °dONLNdó,ä8ë(5äA∫†°dONLNdò,ë8) printer supports either discrê°dONLNd∂,8U)ete or variable rÕ†°dONLNd«,U8Ä)E
  1855. esolution.*‡°dONLNd—,Å8É), ™‡°dONLNd“,É8Ÿ)Discrete resolution臰dONLNdÂ,⁄8)W  means that °dONLNdÒ8äD(Aäthe application can choose fr¢°dONLNd8Dw)~om a limited number of rü °dONLNd&8wD∞)o
  1856. esolutions prİdONLNd38±DΔ):edefiº@°dONLNd88ΔD˜) ned by the °dONLNdCDäPΔ(Mäprinter driverI°dONLNdQDΔP<)<. For example, the ImageWe‡°dONLNdjD<P«)v!riter printer supports four discrV°dONLNdãD«P⁄)ãete rp†°dONLNdêD⁄P ) esolutions: °dONLNdúPä\ñ(Yä72 ,    Symbol°dONLNdüPó[ú)
  1857. ¥}°dONLNd†Pú\–)
  1858.  72 dpi, 144 @°dONLNd≠P—[÷)5¥Ä@°dONLNdÆP÷\
  1859. )
  1860.  144 dpi, 80 İdONLNdªP [)5¥ÉİdONLNdºP\W) 72 dpi, and 160 v‡°dONLNdÕPX[])H¥Û‡°dONLNdŒP]\Ö)
  1861.  144 dpi. ˙ °dONLNdÿPÖ\á)( °dONLNd⁄bänë(käV+İdONLNd€bën·)ariable resolution˜‡°dONLNdÌb·ni)P means the application can defi·°dONLNd bjnç)âne any r¨`°dONLNdbén¸)$esolution within a range °dONLNd-näzã(wä1bounded by maximum and minimum values. The LaserW√¿°dONLNd^näz(wäriter printer driver supports °dONLNd|zäÜ¥(Éä
  1862. variable r‡°dONLNdÜz¥Ü))*esolution within a range frü†°dONLNd°z)ÜŸ)u(om 25 dpi to 1500 dpi in both the X and @İdONLNd…z⁄܇)±Yæ`°dONLNd z‡ÜÔ) dirİdONLNdŒzÜ)    ections. °dONLNd◊Üäí∂(èä(However`İdONLNdflÜ∂í‰),
  1863. , a LaserW8 °dONLNdÈ܉íÿ).7riter printer that uses PostScript supports a maximum r∂¿°dONLNd Üÿí)Ù
  1864. esolution of °dONLNd-íäûõ(õä300 °dONLNd1íúù°)¥}°dONLNd2í°û®); 300 dpi. Some other PostScript devices that use the LaserWÌ`°dONLNdmíßû
  1865. (õßriter printer driver can °dONLNdÜûä™—(ßäachieve higher r°dONLNdñû—™Õ)G5esolutions, up to the maximum supported by the LaserWo‡°dONLNdÀûÕ™˝)¸ riter drivere`°dONLNd◊û˝™)0.) 
  1866. wÜ)4wá)
  1867. wá)è4vÜwáò"@@wá∑èfl?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯˛¿˛ Ä¸?Òˇ¯˛ ˛ Ä¸?Òˇ¯˛<Êcc}«ò¸?Òˇ¯˛ˇ¡ΔüBÙß)º¸?Òˇ¯˛òBÑ;)†¸?Òˇ¯˛ÁBsø'ú¸?Òˇ¯¸Ä˛˚?Òˇ¯¸Ä˛˚ ?Òˇ¯¸Ä˜?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Òò"@Ä@Ä∑á˜è?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯˝8˛ Ä¸?Òˇ¯˝$˛ Ä¸?Òˇ¯˝'úΔc}«ò¸?Ìˇ8‰Ùß)º¸?Òˇ¯˝#eÑ;)†¸?Òˇ¯˝!‹‰sø'ú¸?Òˇ¯¸˛˚?Òˇ¯¸8˛˚?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Òò"ĿĿ˜á6è?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Ò?Òˇ¯Òflflflflflflflflflflflflflflflflflflflflflò"¿¿6ávèflflflflflflflflflflflflflflfl˛ ?¿èÅ$˝C‡˝˝˛ Ä@@‚à˝    ¡¿Ä˝˛˛@@"à˝    A@Ä˝!˛Cˆ¸}<‡!àá∞„¡>gÑΔ1…·Ë«˛!˛ƒíR    ì@!…HîA„í    HåíI(˛!˛Dí_Ç\!É…|xîA˙迺íIˆ˛!˛CP@!ÇΔ@Xîa Ç»D¨ëâ˛!˛ÁèÔ;ª r¡o<-€√Öûg∏W€‹˛˛˝@˝Ä˝¸ ˝˝¿˛Ä˛Ä˝¸`˝˝ˆ¸8¸Ä˝fl˛A80‡¡pcÔ˘˛  Cà0D$¿˙˛` à(»@˙˛éO0¢Ü1Ôèã◊ù<<)Ht¿˙˛
  1868. P—H£$IJ¢ëÒ2KH)H'˘˛
  1869. LQ|/ /¬¢ÅIH&H$Ä˙˛
  1870. BQ¿+"(G£QÑÅI0$D$¿˙˛|Ô<:uúÉ«∏Ófiœ%√øgªxt„Œd˙˜Ä˚˝Ñˆ˜Ä˚˝åˆÎpˆfl˛@¸pÓ˛ ¿ Ó˛
  1871. @ Ó˛
  1872. >˘0ˆ}∑c¿/Ô˛ EH!I"íë$§Ô˛ E|!I"í˘$†Ô˛  ëE@ÒI"íÅ$¢Ô˛
  1873. 1fi{º̺y{ê~‹Ä˝@˝ Ì˝@˝ Ì ˝8‡˝pÍfl
  1874. ˛81¸¿Á ˛!$@HË
  1875. ˛` @Á ˛†#ÿD€¿È ˛†!$FI È ˛ !>^I È ˛ ! VI È ˛:tsûÎ?∞Èflflflfl
  1876. ˛`˝ÄÎò"
  1877. 
  1878. váÄè˛
  1879.  ÄÇ@β
  1880.  ÄÑ Î˛
  1881. -ù¸ú˜É Î˛
  1882. $†ê…
  1883. Ñ Î˛
  1884. $òì…
  1885. Ñ Î˛
  1886. $Ñí…ä    Ç@βs¯ydwÄÎflflflòÅ@HH<MIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  1887. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇ
  1888. ˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝
  1889.  
  1890.  
  1891.  ˛êêê@wá∑è'ÅÅ˘    ŎˆˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜˇ˙ˇˇˇ˝ˇˇˇçˇÜˇ˙
  1892. ˇˇˇˇˇˇçˇÜˇ˚ˇˇˇˇˇˇéˇÜˇ˚ˇˇˇˇˇˇéˇÜˇ˚ˇˇˇˇˇˇéˇÜˇ˚ˇ˛ˇˇˇˇˇ˛ˇéˇÜ"ˇ˙ˇ˚ˇ¸ˇçˇfl˛ˇ·ˇÙˇ⁄!ˇ˙ˇıˇçˇflˇˇ‚ˇÙˇ⁄?ˇÅ¯ˇflˇ˝ˇ˛ˇˇˇˇˇ˛ˇˇˇˇ˛ˇˇ¸ˇ˛ˇ˛˝ˇˇˇfiBˇÅ¯ˇ˛Áˇ¸˛ˇ˛ˇˇˇ¸ˇˇ˝ˇ˝ˇˇˇˇ˛ˇ    ˇˇˇˇ˝ˇflÆˇıˇˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇÙˇflˇ˛    ˇˇˇˇˇˇ˝ˇ˝ˇˇ˝ˇ˝˛ˇ
  1893. ˇˇˇˇˇˇˇ‹Dˇıˇëˇˆˇflˇ˝˛ˇ˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇ˚ˇˇ˝ˇ˛ˇflˇıˇëˇˆˇ÷ˇ€ˇŸˇÑˇˆˇ÷ˇfi˛ˇÿˇÅ¯ˇ÷ˇ≤ˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜòÅ@ÄHH8NIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  1894. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇ
  1895. ˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝
  1896.  
  1897.  
  1898.  ˛êêê@Ä∑á˜è' ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇ‹˛ˇ‰ˇÙˇ⁄ˇÅ¯ˇ‹ˇˇÂˇÙˇ⁄>ˇıˇÖˇ‹ˇ˝ˇ˛ˇˇˇ˛ˇˇˇˇ˛ˇˇ¸ˇ˛ˇ˛˝ˇˇˇfiBˇıˇëˇÿˇ˚˛ˇ˛˛ˇˇ˝ˇˇ˝ˇˇˇˇ˛ˇ    ˇˇˇˇ˝ˇflAˇıˇëˇˆˇ‹ˇ˛    ˇˇˇˇˇˇ¸ˇˇ˝ˇ˝˛ˇ
  1899. ˇˇˇˇˇˇˇ‹=ˇÑˇˆˇ‹ˇ˝˛ˇ˛ˇ˛ˇˇ˛˛ˇ˛ˇ˚ˇˇ˝ˇ˛ˇflˇÅ¯ˇ—ˇ‡ˇŸˇıˇÖˇ‘˛ˇ‚˛ˇÿˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜòÅÄ¿HH<OIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  1900. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇ
  1901. ˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝
  1902.  
  1903.  
  1904.  ˛êêêÄ¿˜á6è'ˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜˇıˇÖˇÜˇıˇëˇˆˇÜˇıˇëˇˆˇÜˇÑˇˆˇÜ ˇÅ¯ˇÜ|ˇı˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇıˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ ˇÅ¯ˇÜ    ŎˆˇÜÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘òÅ¿HH8PIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  1905. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇ
  1906. ˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝
  1907.  
  1908.  
  1909.  ˛êêê¿6ávè'ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘2Á˘ˇ‰ˇ˘ˇ˛¸ˇ˚ˇÔˇˇ¯¸ˇ‹ˇ˝¸ˇË˝ˇfiˇˇÊKÊˇ˝ˇ„ˇ˙ˇ¸ˇ˛ˇÚˇ˚˛ˇ˛ˇ¯ˇ˛ˇfiˇˇ¸ˇ˛ˇËˇˇˇÛˇÓˇÊGÊˇflˇˇ˙ˇ¸ˇ˛ˇÚˇ˘ˇ˛ˇ¯ˇ˛ˇ›ˇ¸ˇ˛ˇËˇ˛ˇÛˇÓˇÊ†Ê¸ˇˇ˝˚ˇˇˇ˚ˇ˙ˇˇ˚ˇ˚ˇ˛¸ˇˇ˝ˇ˛ˇ˙ˇ˝ˇ˘ˇ˛ˇ˛ˇ˝˝ˇˇˇ˙ˇ˛˝ˇ˛˝ˇ¸ˇ˛ˇˇ˛¸ˇˇˇ˝ˇ˝ˇˇˇ˛ˇˇ˛ˇˇ˛˛ˇˇ˝ˇ˝˝ˇˇ˛ˇˇ˛˛ˇÒ∂Êˇ˛˛ˇ˛ˇˇˇˇˇˇˇ¸ˇˇ˚ˇ˚˝ˇˇˇˇ˛ˇˇˇ˘ˇ˝ˇ˘˝ˇ˝ ˇˇˇˇˇˇ˚ˇˇ˛ˇˇˇ˛ˇ¸˝ˇ˛ˇˇ˛ˇ˛ˇˇˇˇ˚˛ˇ˝ˇˇˇˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇˇÓ¶Êˇ¸ˇ˛
  1910. ˇˇˇˇˇ¸ˇ˝¸ˇ¸ˇ˚ˇ¸ˇ˛ˇ˛ˇˇˇ˛ˇ˝ˇ˝ˇ˘ˇ¸˝ˇˇˇ¸ˇ˛˝ˇ˛ˇˇˇ˛ˇ¸ˇ˝˝ˇ˛ˇ˛˚ˇˇ˚ˇˇ˛˚ˇ˚ˇ˝ˇˇˇˇˇˇ¸ˇˇˇ≤Êˇ¸ˇ˝ˇˇ˛ˇˇˇˇˆˇ˚ˇ˚ˇ¸ˇ˛ˇ˛ˇˇˇ˘ˇ˝ˇ˘ˇ¸ˇˇˇ˛ˇˇˇ˙ˇˇˇ˛ˇˇˇ˛ˇˇ˝ˇ˝ˇˇˇ˛ˇ˛ˇˇ¸ˇ˚ˇˇˇˇ˝ˇ˛ˇˇˇˇˇˇˇ˛ˇˇ˛ˇˇ˙ˇÒ†Á˛ˇ˛˛ˇ˝ˇ˛˙ˇ˝ˇ˙ˇ˙ˇ˝˛ˇ˛˛ˇ˛ˇ˛ˇˇˇˇ˚˛ˇˇ˘˛ˇ¸ˇˇˇ˝ˇ˝ˇ˝ˇˇˇ˛ˇˇˇ˝ˇ˝˛ˇ˝ˇˇˇ˝ˇ˙ˇ˝˛ˇˇˇ˝ˇ˛ˇ˝ˇˇ¸ˇˇˇ˝ˇ˛ˇ˙ˇ&›ˇ˝ˇ‰ˇ€ˇÌˇ˝ˇ◊ˇ–ˇ˝ˇ‰)›ˇ˛ˇˇ„ˇ›ˇÏˇ˛ˇˇ◊ˇ–ˇ˛ˇˇ‰‹˛ˇ•˛ˇ÷˛ˇ–˛ˇ‚ÅÅ˘DÊ˛ˇˆˇ¸ˇ˜˛ˇ¸ˇˇÓ˝ˇÊˇ˝˙ˇ¸ˇ˙¸ˇ˙ˇˆˇ˛ˇ¸ˇˇ˛¸ˇ˝ˇ…S¡ˇˇˆˇˇ¸ˇÓˇ˛ˇÁˇˇ¸ˇ˝ˇ˝ˇˇ˙ˇˇ˛ˇÚˇÏˇˇ¸ˇ˛ˇ˝ˇˇˇˇÀM¡ԡˆˇˇ˛ˇˇÓˇ˛ˇÊˇ¸ˇ˜ˇ˚ˇˇ˛ˇÚˇÏˇˇ˛ˇˇˇ˘ˇ˛ˇÀ両˛˛ˇˇ˝ˇˇˇ˙ˇˇˇˇ˛ˇ˝ˇˇ˜ˇˇ˝ˇˇ˛ˇˇ˛˝ˇ˝ˇ˛˝ˇ¸¸ˇ˛˝ˇ˚ˇˇ˛ˇ˝ˇˇ˝ˇ˛ˇˇ˝ˇ˝˝ˇ˝
  1911. ˇˇˇˇˇ˝˛ˇˇˇˇÀ†Âˇˇˇˇ˝ˇˇˇ˛ˇˇˇ˚ˇˇˇˇ˛ˇˇˇˇˆ
  1912. ˇˇˇˇˇˇ˝ˇˇˇˇ˛ˇ¸ˇ˛ˇˇ˛ˇ˚ˇ˝ˇ˛ˇˇˇˇˇˇˇˇ˛    ˇˇˇˇ¸
  1913. ˇˇˇˇˇ¸ˇ˛ˇ…ò    ˇˇˇˇˇ˛ˇˇ˛ˇ¸ˇ¸ˇˇˇˇ˝ˇˇ˜ˇ˝ˇ˚ˇ˝ˇ˝ˇˇˇˇ˛ˇ¸ˇ˚ˇ˛ˇ¸ˇˇ˚ˇ˛ ˇˇˇˇˇ˛    ˇˇˇˇ¸
  1914. ˇˇˇˇˇ¸ˇˇˇ °Âˇˇˇ˝ˇˇˇ˛˛ˇ¯ˇˇ˛ˇˇˇˇˇ˛ˇ˙ˇ˛ˇˇ˝ˇ˛˛ˇ˛ˇˇˇˇ˛ˇˇ˝ˇ˝ˇˇ˛ˇˇ˝ˇˇ˚ˇ˛ ˇˇˇˇˇ˛ˇˇ˛ˇˇ˚ˇˇ˛ˇ˛ˇ˝ˇˇˇˇÀñʸˇ¸ˇ˛ˇ˝ˇ˝ˇ˝˛ˇˇ˛ˇˇˇˇ˛ˇˇ¸˝ˇ˛˝ˇ˛ˇ˛˛ˇ˛ˇˇˇ˝ˇ˝˙ˇ˝ˇˇˇ˛ˇ˝˛ˇ˚ˇˇˇ˝ˇ˛ˇˇˇ˝ˇ˝˛ˇˇ˛ˇ˛˝ˇ˛ˇˇˇˇœ±ˇΔˇfiˇ˝ˇØ±ˇΔˇfiˇ˛ˇˇØÅ–˛ˇ≠ÅÅ˘‰ˇÒˇˇÙ˛ˇˇ“˛ˇÅ̉ˇˇıˇ˛ˇˇÂˇÓˇÅÏ¡ˇÒˇˆˇ¸ˇÂˇÓˇÅÏL¡ˇ˛¸ˇ¸ˇˇˇˇ˙ˇ˙˝ˇ˝ˇˇˇ¸ˇˇˇˇˇ˛ˇˇˇ˛˝ˇ˘ˇ˝ˇ˛ˇˇÅˆ\Êˇ˛ˇ˛ˇ˛ˇˇ˛ˇˇˇˇ˚ˇ˚ˇ˝ ˇˇˇˇˇ˛
  1915. ˇˇˇˇˇˇ˛ˇ˜ ˇˇˇˇˇÅ˜Qʸˇ˛ˇ˛ˇˇ˛ˇˇ¸ˇ¸ˇ˚ˇ˝ ˇˇˇˇˇ˛    ˇˇˇˇ¸ˇˇ˜ˇˇˇˇÅÙVÁˇ¸ˇˇ˛ˇˇ˛ˇˇˇ˜ˇ˛˝ˇ˛ ˇˇˇˇˇ˛
  1916. ˇˇˇˇˇ˚ˇ˜ˇˇˇˇ˛ˇÅ¯VÁˇˇ˛˛ˇ˝ˇ˝ˇ˛ˇ˝ˇ˙˛ˇ˝˛ˇ˛ˇˇˇˇˇ˝ˇ˛˝ˇˇ˝ˇ˛ˇˇ¸˚ˇˇˇ˛ˇˇÅ˙fiˇ¸ˇŸˇÈˇÅÂfiˇ¸ˇŸˇÈˇÅÂfl˛ˇ˛˛ˇ€˛ˇÅÕÅÅ˘Á˛ˇ¸ˇˇ˛˙ˇ˘ˇˇˇÅ≥&Êˇˇ¸ˇ˝ˇˇˇ˙ˇ˛ˇ˙ˇˇÅæÊˇˇ˛ˇˇ˙ˇ¯ˇ˝ˇÅ≥-Êˇˇˇˇ˙ˇ˛˝ˇˇˇ˝ˇ˛ˇˇˇˇˇ˝ˇÅ√2Êˇˇˇˇ˙ˇ˝ˇˇˇ˛ˇ˛
  1917. ˇˇˇˇˇˇÅƒ/Êˇˇˇˇ˙ˇ˝ˇ¸ˇˇ˝ˇ ˇˇˇˇÅƒ/Êˇˇ˛ˇ˙ˇ˝ˇˇ˚ˇˇˇˇˇˇˇˇÅƒ2Á˛ˇˇ˛ˇˇ˛˛ˇ˛ˇ˝ˇ˛ˇˇˇˇ˙ˇˇˇÅ≈ÅÅ˘ÅÅ˘ÅÅ˘ÅÅ˘Ê˝ˇˇˇ◊˛ˇ˙ˇˇÅ“òÅ
  1918. HH<QIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  1919. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇ
  1920. ˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝
  1921.  
  1922.  
  1923.  ˛êêê
  1924. váÄè'%¡ˇ˛ˇÙˇˆˇÚˇ˛ˇ¸ˇˇÅ”#¡ˇ˛ˇÙˇˆˇÔˇˇ˝ˇ˝ˇÅ‘:¡ˇ˛ˇˇˇˇˇ˛ˇ˙ˇˇ˛ˇ˝ˇ˝ˇ¸ˇˇ¸ˇ˝ˇÅ‘:¡ˇ˛ˇˇˇˇ¸ˇˇ˝ˇˇˇˇ˝ˇˇ¯ˇ˝ˇ˝ˇÅ‘<¡ˇ˛
  1925. ˇˇˇˇˇ˛ˇˇ˝ˇˇˇ˝ˇˇ¯ˇ˝ˇ˝ˇÅ‘@¡ˇ˛ˇˇˇ˝ˇˇˇˇˇˇˇˇˇ˛ˇˇ¸ˇˇˇ¸ˇˇÅ”5ʸˇ˛ˇ˙ˇ˝˝ˇˇˇˇˇ˛˛ˇ˛ˇ¸ˇˇ˝ˇ˛ˇˇÅ“ÅÅ˘ÅÅ˘ÅÅ˘ˇ:@ˇ ˇˇˇˇ@
  1926. ˇ·ˇ‚7^
  1927. 4*\˜, Palatino
  1928. .+l"CHAPTER €`)\1,     Helvetica
  1929.     (@lThe Printing Manager4⁄*˙¯
  1930. (‡*1 )-c)6
  1931.     )9About the Printing Manager
  1932. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  1933. °dONLNd\lhÅ(elIn orj`°dONLNd\Åh);der to print, your application does not need to check the r¶¿°dONLNd@\hÛ)˛esolutions available or set °dONLNd\hltÄ(qlthe r¢`°dONLNdahÄt◊)esolution. However @°dONLNdsh◊tô)W/, if your application does factor in possible r†°dONLNd¢hôtÂ)¬esolutions, it can °dONLNdµtlį(}l!obtain the best quality output fr
  1934. @°dONLNd÷t˘Ä{)çom a printer choosing equal rM†°dONLNdÛt{ÄÊ)Çesolutions for the X and Ï@°dONLNd tÊÄÏ)kYj °dONLNd
  1935. tÌÄÔ) °dONLNdÄlåx(âldirI °dONLNdÄyå)
  1936. $ections. Some devices support X and M@°dONLNd5Äå#)§YÀ °dONLNd6Ä#å)) r °dONLNd8Ä*åv)esolutions that arEİdONLNdJÄvåÍ)Le not equal, but using this °dONLNdfålòë(ïl    type of r´†°dONLNdoåëò„)%esolution usually r˘°dONLNdÇå„òı)R@esults in a distortion of the printed image. For information on °dONLNd¬òl§˚(°l how to determine the available r‰ °dONLNd‚ò˚§6)èesolution or rÓİdONLNdò6§ó);esolutions for the currQ °dONLNdòò§÷)bently selected °dONLNd§l∞ä(≠lprintero¿°dONLNd§ä∞ü), see ¿°dONLNd#§ü∞Q)'“Determining the Resolution of the CurrÅ@°dONLNdJ§R∞∂)≥ent Printer” on page 1-‡°dONLNda§∑∞¡)e17‡°dONLNdc§¡∞Δ)
  1937. . 
  1938. µ*–¯4∂*–¯
  1939. ·*ȯ4‚*ȯ ‚*‚˛
  1940. ˇ·ˇ‚7^
  1941. ˇˇ£‰ˇÆ°dONLNdfŒ*‡˚(‹*About the Printing Managerˇˇˇˇˇˇ⁄|(‹Ó1
  1942. °dONLNdÅÒl˝Å(˙lIn orj`°dONLNdÜÒÅ˝
  1943. ) der to print, your application fi≠ °dONLNdßÒ
  1944. ˝‰)â2rst uses the Printing Manager to open the printer °dONLNdŸ˝l    á(ldriver‡°dONLNdfl˝á    å). Ó@°dONLNd·˝ã    ë)YÆ¿°dONLNd‚˝ë    ø)
  1945. ou then pr°@°dONLNdÏ˝ø    “).epar2°dONLNd˝”    )Be the document for printing by formatting it as necessary for the °dONLNd2    lfi(lRpage size that the user has selected. When you print, you draw the document using .°dONLNdÑl!ß* QuickDraw rR`°dONLNdèß!);outines into the printing ,
  1946. CourierR`°dONLNd©!F)ografPortR`°dONLNd±F!K)0. .°dONLNd¥'l3(0l"The Printing Manager gives you a  ø °dONLNd÷'3T)õprinting grafPort9İdONLNdÁ'U3‰)N when you open a document for ˇˇ’T.°dONLNd3l?–(<lprinting. The printing ˇˇ¸ˇ¸°dONLNd3–?)dgrafPortˇˇ’Tˇ¸°dONLNd$3?x)0 data type is a QuickDraw ˇˇ¸ˇÙ°dONLNd>3y?©)ygrafPortˇˇ’TˇÙ°dONLNdF3©?˜)0 with additional °dONLNdW?lKs(Hlfi°dONLNdY?sK)'elds that customize it for printing. (Yï°dONLNdÄ?Kú)ßou must check for the type of ï°dONLNdû?úKÃ)ÇgrafPortï°dONLNd¶?ÃKÊ)0 data °dONLNd¨KlWˆ(Tl type, because it may be a color °dONLNdÃKˆW&)ägrafPort°dONLNd‘K&Wr)0 data type.) The °dONLNdÂKrW¢)LTPPrPort°dONLNdÌK¢WÂ)0 data type defi°dONLNd¸KÂWı)Cnes °dONLNdWlc•(`l
  1947. the printing °dONLNd
  1948. W•c’)9grafPort°dONLNdW’c€)0 rR`°dONLNdW€cÌ)ecor$¿°dONLNdWÌc¸)d.   $¿°dONLNd W¸c)  °dONLNd#ol{Ñ(xlTYPE°dONLNd,oê{¿)$TPPrPort°dONLNd7oΔ{Ã)6=°dONLNd9oÿ{)    ^TPrPort;°dONLNdH}êâ∫(ÜêTPrPort°dONLNdR}ΔâÃ)6=°dONLNdUãlóê(îlRECORD°dONLNd`ô~•fi+gPort: GrafPort;°dONLNdvôÍ•)l{°dONLNdwô• )grafPort°dONLNdô •n)0
  1949.  to draw in }°dONLNdëß~≥fi(∞~gProcs: QDProcs;°dONLNdßßÍ≥⁄)l({drawing routines of the printer driver}°dONLNd‘µ~¡>(æ~ { more fields for internal use }°dONLNdı√lœÑ(ÃlEND;.°dONLNd˙€lÁr*Y@İdONLNd˚€rÁÂ)Vou print text and graphics by drawing into this port with QuickDraw calls, just as if °dONLNdQÁlÛê(lyou werÒ`°dONLNdXÁêÛÍ)$e drawing on the scrˇ¿°dONLNdlÁÍÛÀ)Z6een. (The printer driver installs its own versions of .°dONLNd¢Ûlˇ(¸lQuickDraw’s low-level drawing rR`°dONLNd¡ÛˇD)ôoutines in the R`°dONLNd–ÛDˇh)?gProcsR`°dONLNd÷Ûhˇq)$ fiR`°dONLNdŸÛqˇΔ)    eld of the printing R`°dONLNdÌÛΔˇˆ)UgrafPortR`°dONLNdıÛˆˇ¯)0 .°dONLNdˆˇl Û(ldata type, causing your higherü‡°dONLNdˇÛ fi)á7-level QuickDraw calls to drive the printer instead of °dONLNdK læ(ldrawing on the scrD¿°dONLNd] ø”)Seen. {¿°dONLNdb ”Ÿ)Y<@°dONLNdc Ÿ)ou should stor‡°dONLNdq §)@e your versions of QuickDraw rµ†°dONLNdè §‚)ãoutines in the .°dONLNdûl#ê( lgProcs°dONLNd§ê#ñ)$ fPİdONLNd¶ñ#») ield of the PİdONLNd≤»#Ê)2gPortPİdONLNd∑Ê#Ï) f!°dONLNdπÏ#) ield of the !°dONLNd≈#N)2grafPort!°dONLNdÕN#à)0 data type.)  °dONLNd‹)l5Q(2l1Once you have drawn the document in the printing °dONLNd
  1950. )Q5Å)ÂgrafPort°dONLNd)Å5Ù)0, the printer driver takes .°dONLNd05lA(>loverö†°dONLNd45AQ)1, translating the QuickDraw calls for the printer¿°dONLNde5QAfi)“". The printer itself does nothing °dONLNdáAlMù(JlEexcept draw the document on a page, exactly as the printer driver dir`°dONLNdÃAûMº(Jû    ects it. 
  1951. r*x¯4s*x¯ sls¯
  1952. ˇ·ˇ‚7^
  1953. ˇˇ◊ˇ◊°dONLNd÷alr™(nlThe UsereİdONLNdfia¨r2)@’s Formatting Inputˇˇˇˇˇˇ®(n1
  1954. °dONLNdÚxlÑ“(ÅlMThe user gives you the information on how to format and print a document—for °dONLNd    ?ÑlêÒ* Wexample, the dimensions of the page, the pages of the document that should be printed, °dONLNd    ñêlúfl* the number of copies—thrF¿°dONLNd    Æê‡ú.)tough two standard@°dONLNd    æê.úÔ)N-d dialog boxes: the style dialog box and the °dONLNd    Îúl®Ø(•ljob dialog box. ˇ*Í@ˇ ˇˇˇˇ@
  1955. ˇ·ˇ‚7^
  1956. 4H\, Palatino
  1957. .+ä"CHAPTER €`)\1,     Helvetica
  1958.     (@äThe Printing Manager4⁄ä˙(‡äAbout the Printing Manager
  1959. 
  1960. ‡(‡1ù)-‡)7
  1961. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  1962. °dONLNd\ähù(eäThe ª¿°dONLNd\ùh“) style dialogƒ†°dONLNd\“h‘)5 D†°dONLNd\’hÂ)boxÔİdONLNd\Âh¬)4 lets the user specify the dimensions of the paper ri°dONLNdH\√h)fiectangle and any °dONLNdYhät…(qäoptions that af"†°dONLNdhh t)@Jfect the image to be printed, which is the information you need to format °dONLNd≤täÄÃ(}äthe document. i¿°dONLNd¿tÃÄ“)BY*@°dONLNd¡t“Ä
  1963. )Iour application can customize the style dialog box to ask for additional °dONLNd
  1964. Ääå√(âä
  1965. information. ;`°dONLNdăå‹):Figur °dONLNdÄ‹å)e 1-2´†°dONLNd!Äåƒ)/ shows a sample style dialog box for the LaserW—°dONLNdPăå)‘riter SC printerÒ °dONLNd`Äå )B. °dONLNdbåäòê(ïäY@İdONLNdcåêò)our application should pr<‡°dONLNd|åò)q:esent the style dialog box when the user chooses the Page °dONLNd∂òä§‹(°äSetup command frh¿°dONLNdΔò‹§.)Rom the File menu. 
  1966. «Hÿ4»Hÿ"»H_
  1967. ˇ·ˇ‚7^
  1968.     °dONLNdˇˇ(≈ä
  1969. Figure 1-2°dONLNdŸΩû“)BA0°dONLNd⁄Ω“»4) sample style dialog box 
  1970. °dONLNdÙaämù(jäThe ª¿°dONLNd¯aùmfi)job dialog boxG °dONLNdaflm¥)B1 lets the user specify how to print the document x†°dONLNd7a¥m◊)’    this timeΩ`°dONLNd@a◊m)#, such as the °dONLNdNmäy˛(väWprint quality (whether high-quality or draft-quality), the type of paper feed (such as °dONLNd•xäÑfl* Npaper tray or manual), the range of pages to print, and the number of copies. á °dONLNdÛxflÑÂ(ÅflYG†°dONLNdÙxÂш)our °dONLNd¯Ñäê(çäYapplication can customize the job dialog box to ask for information beyond these topics. °dONLNdQêäú¢* FigurR¿°dONLNdVê¢ú∂)e 1-3@°dONLNd[ê∂úÉ)- shows a sample job dialog box for the LaserW©°dONLNdàêÉú≈)Õriter SC printer… °dONLNdòê≈ú )B. õİdONLNdöê ú–)Y\°dONLNdõê–ú·)our °dONLNdüúä®È(•äapplication should prç °dONLNd¥úÈ®)_Aesent the job dialog box when the user chooses the Print command °dONLNdı®ä¥ë(±äfrò‡°dONLNd˜®ë¥„)om the File menu. 
  1971. ÿHÈ4ŸHÈ"ŸH_
  1972. ˇ·ˇ‚7^
  1973.     °dONLNdˇˇ(÷ä
  1974. Figure 1-3°dONLNd
  1975. ŒÃŸ“)BA0°dONLNd Œ“Ÿ.) sample job dialog box 
  1976. mHs4mHr mäm
  1977. ˇ·ˇ‚7^
  1978. ˇˇ◊ˇ◊°dONLNd#[älˆ(häThe Print RecorF°dONLNd2[ˆlú)ld and the Printing Loopˇˇˇˇˇˇ®(h1
  1979. .°dONLNdJrä~û({äIn orR`°dONLNdOrû~X)+der to print a document, you need a print r$¿°dONLNdzrX~j)∫ecor˜ °dONLNd~ri~à)d. The .˜ °dONLNdÖrà~¿)
  1980. print record,.ú`°dONLNdír¡~Â)9     of type ,
  1981. Courierú`°dONLNdõrÂ~    )$TPrintú`°dONLNd°r    ~ )$ .°dONLNd¢~ääù(áä(see $ °dONLNdß~ûäæ)page 1-R‡°dONLNdÆ~æä») 30R‡°dONLNd∞~»ä)
  1982. G) contains the Printing Manager version, information about the printer °dONLNd˜ääñ¿(ìä(such as its rC`°dONLNdä¡ñê)70esolution in dpi), the dimensions of the paper r⁄İdONLNd5äêñ›)œectangle, and the °dONLNdGñ䢶(üäspecifiÓ °dONLNdNñ¶¢õ)9cations the user made in the style and job dialog boxes. Z@°dONLNdáñú¢û)ˆ 
  1983. ◊HI4ÿIIòÄ>†ËHHHˇˇˇˇˇˇ†Ë€çC ƒˇÄΔÄΔüΔˇ˚üΔˇÛòΔòΔòΔ
  1984. òœ˚ˇ‡
  1985. ò–˙ˇ¯
  1986. ò–˙ˇ¸ò–¿˚>ˇò–˚ˇéò–`˚oò–@˚'˝!ò‡¸˛ôÄcáÄÂÄ˚˘!ò0¸˛ôÄL@ÂÄ˚    %ò1„g<môõgè ‰ Ä„    %ò33åôôëò#2fqôúcú ‰ Ä30    (ò„3ôèò8faôòcòåÁ|Ä3`    (òÛôôò3~aôòcòÃÁ"Ä3¿    &ò˝˛ô ò3`aôòcÃÁ"Ä3Ä    )ò    ˛ô
  1987. ò3&baôcòÃ@Ë"Ä3¿    )ò„èò<a˛aèáÄË"Ä3`    ò”"Ä30    ò”úÄ„    ò–Ä˚    ò–Ä˚    ò“ˇÄÄ˚    ò–@˚'    ò“ˇÄ`˚o    ò–˚ˇé    ò–¿˚>    
  1988. ò–˙ˇ¸    ò¯<ÔÌ˙ˇ¯    &ò‡˙√ò‡00¿˜ ¿``aÄÛ˚ˇ‡    !ò0˚Åôê00¿˜`‡`aÄÍ    (ò1„·„l<ÅôÄ0<y„Δ¿˘
  1989. a``xÛ«çÄÏ    &ò2˛3 å~Aô¿0f0Δg¯    b``ÃaåŒÎ    &ò·Û33˛    ~Aò‡0f0Δf¯    ‰``ÃaåÃΠ   &ò33Û˛    ~Aòp0~0«Ê¯    g`¸aèÃΠ   &ò33˛    ~Aò00`0Δ¯˛`¿aå Π   &ò33 <Åô00b0Δ&¯˛`ƒaåLΠ   &òÛ·„ Ä‡><cΔ¯    ``|x0«åΠ   ò˚√ Ï˚ˇÄ    ò˚<ÔÏ`˚`    
  1990. òœ@˚     
  1991. òœÄ˚    
  1992. òœÄ˚    ò¯<ÔÏÄ<˝¿    'ò¯√ò‡0˛`¯ «‡`aÄÛÄb˝¿    )ò˘Åôê0˛`¯f`aÄÛ
  1993. Ä`<|8x¿    +ò˘    ÅôÄ0<><`¯
  1994. f`xÛ«çÄı
  1995. Ä`Ffdÿ    *ò˘    Aô¿0ffF`¯    g¿`ÃaåŒÙ
  1996. Ä`>f`ÿ    *ò˘    Aò‡0ff>`¯    ¿``ÃaåÃÙ
  1997. Ä`ff`¸¿    *ò˘    Aòp0~ff`¯˛`¸aèÃÙ
  1998. Ä`ff`¿¿    *ò˘    Aò00`ff`¯˛`¿aå Ù
  1999. Äbffdƒ¿    *ò˘    Åô00bff`¯    d``ƒaåLÙ
  2000. Ä<>f8x¿    'ò˘    Ä‡><>>`¯    √¿|x0«åÙÄ˚    ò¯√¸ˆ ÏÄ˚    ò¯<¸FıÏÄ˚    òÚ<fl@˚     
  2001. òœ`˚`    
  2002. òœ˚ˇÄ     ò¯<–    ò¯ √0xÄ€    ò˘ÅÑpà ˛€    ò˘Ńx0à èÒfi    ò˘    A‰Ã0à ¸ôòfi    ò˘    AtÃ0øôòfi    ò˘ A<Ã0à ôü˛ô¯fi    ò˘AÃ0à ôòôôÄfi    ò˘ Šÿ0à ô˛ôàfi    ò˘Åx¿0xôûÒfi    ò¯√ˆÄ›    ò¯<ˆÄ›    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òÓ˝7¸ˇ‡Û˚pÄ    8ò‡ `å˚qIJ0¿<<I¸  ¯įΔĸ
  2003. qÄ`dê@    7ò0˛`Ä˚»˝@ 8ffJ¸  ¿ÄÃĸ
  2004. …Ä`‰†`    <
  2005. ò3lx¯Ò„Ãx¯˝
  2006. ¡üèO ff2¸ ¡ò„¿Ãœè¯x|xp¡Ò∂|fc `    <
  2007. ò3åÃÃb1åÃÃ˝
  2008. ·Åôòüêff¸ ¡ôëÄÃΔåÃåÃû·ôΔfl`@`    <
  2009. ò3 ÃÃaÒåÃÃ˝
  2010. qÉÄüêff¸ Òò˘ÅįΔåÃ|ÃÇqôÜfx`@`    =
  2011. ò3 ¸Ãc1åÃÃ˝ 9ÜÄüêff    Ä˝  ¿ÒôÅÄÃΔå˛Ã¸p9ôÜfpò`    =
  2012. ò3 ¿Ãc1åÃÃ˝ åüêff
  2013. @˝  ¡ôôÅÄÃΔå˛Ã¿8ôÜfx`§`    =
  2014. ò3 ƒÃc1åÃÃ˝ ôòòO ff@˝  ¡ôôëÄÃΔå˛ÃƒòôôÜfla$`    =
  2015. ò„ xÃ1ÃxÃ˝ qüè@ <<Ä˝ ˘ò¯‡¿¯√åÃ||xpqôÜffa@    òÓ0¿¯ ˆ ˘Ä    òÓ˜ˇ‡ˆåÛ     ò’xÛ    òΔ    òΔ    òÓ˛7˚ˇ‡Á    *ò˛ˇ¯˛ˇ¯¯0¿~~I˚!¯Äp˛ ``Ú    )ò˛ˇ¯˛¯@ `J˚ `Ä»˛ `Ò    ,ò˛ˇ¯˛¯@ `2˚ a„3¿¡ˇ|g√‡Ù    ,
  2016. ò˛¯ˇ¸¯Ä|˚ c31Ä·˛ôå˛f`Ù    ,
  2017. òfiˇ˘¯!¯Ä ˚ c31Äq˛ôå˛f`Ù    -
  2018. òé˛:¯q¯Ä    Ä¸ cÒ·Ä9˛ôå˛f`Ù    -
  2019. ò˝€x˘à¯Ä
  2020. @¸ c1IJôå˛f`Ù    ,
  2021. ò˝ÿ8˝»¯@ F@¸ c1Ä˝ôå˛f`Ù    -
  2022. òé˝fl∏qH¯@ <ĸ a„0¿qôèffc‡Ù     
  2023. ò鞸∏qH¯0¿¯ ı`Ù     
  2024. òéÒ«∏qH¯˜ˇ‡ˆ`Ù    
  2025. òéÔ˚∏qÄHfl¿Ù    
  2026. òéÔ˚∏q@@H–    
  2027. òéÔ˚∏q¸@H–    
  2028. òéÎÎ∏q\H¯˛7fi    
  2029. òéÎÎ∏q"H¯0¿~<Ifi    
  2030. òéÎÎ∏qH¯@ `fJfi    
  2031. òéÎÎ∏q"H¯@ `f2fi    
  2032. ò˛ÎÎ∏\H¯Ä|ffi    
  2033. òÆ‚#∏Q¸@H¯Äffi    
  2034. ò˛˙Ø∏@@H¯Äf    Äfl    
  2035. òÆ˙Ø∏QÄH¯Äf
  2036. @fl    
  2037. ò˛˙Ø∏H¯@ Ff@fl    
  2038. òÆ˙Ø∏QH¯@ <<Äfl    
  2039. ò˛˙Ø∏H¯0¿€    
  2040. òÆ˙Ø∏QH¯⁄    
  2041. ò˛¯è∏H–    
  2042. ò˛ˇˇ∏H–    
  2043. ò˛8ˇˇ»–    ò˛ˇ¯˛–    ò˛ˇ¯˛–    ò˛ˇ¯˛ˇ¯–    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    òΔ    üΔˇÛ    êΔ    ÄΔ    ƒˇ    ƒˇ    
  2044. ËHD4ÈHCòÄ>wÁHHHˇˇˇˇˇˇwÁÌå;»≈ˇ˛ÄΔÄΔüΔˇ˙üΔˇÚòΔòΔòΔ
  2045. òœ˚ˇ‡
  2046. ò–˙ˇ¯
  2047. ò–˙ˇ¸–ò–¿˚>êò–˚ˇéêò–`˚oêò–@˚'ê!ò‡¸˛ôÄcáÄÂÄ˚ê!ò0¸˛ôÄL@ÂÄ˚ê%ò1„g<môõgè ‰ Ä0ê%ò33åôôëò#2fqôúcú ‰ Äò0ê(ò„3ôèò8faôòcòåÁ|Äô∂|xê(òÛôôò3~aôòcòÃÁ"ÄôΔf0ê&ò˝˛ô ò3`aôòcÃÁ"ÄÒÜf0ê)ò    ˛ô
  2048. ò3&baôcòÃ@Ë"ÄÅÜf0ê)ò„èò<a˛aèáÄË"ÄÅÜf0êò”"ÄÅÜf0êò”úÄÅÜfêò–Ä˚êò–Ä˚êò“ˇÄÄ˚êò–@˚'êò“ˇÄ`˚oêò–˚ˇéêò–¿˚>ê
  2049. ò–˙ˇ¸ê
  2050. ò–˙ˇ¯ê
  2051. òœ˚ˇ‡êòΔêòΔêòΔêòΔêòΔêòΔêòΔêò˚˝ˇ‡Ì˝ˇ‡˛˛ˇ˛Ùê%ò˚˝ Ì˝ ˛@˛˝˚ˇÄê%ò˚˝ Ì˝ ˛@˛˝`˚`ê%ò˚˝ Ì˝ ˛@˛˝@˚ ê%ò˚˝ Ì˝ ˛@˛˝Ä˚ê.ò˚˝ ˘˝¿¸˝ ˛@˛˝Ä˚ê9ò‡ ˛ >¸aÄxà 0˝˝ ~@˛˝Ä<˝¿ê8ò˝˛ 3¸Ä@ÃÃ˝˝ @˛˝Äb˝¿ê=ò„„d ˛ 3`û@ÃÃ6xˇå˝ x¿@˛˝
  2052. Ä`<|8x¿ê=ò˛32d ˛ 3#332a? Ãà8˛Ã˝ ÿ@˛˝
  2053. Ä`Ffdÿê=ò˛38 ˛ >338? ¸Ã 0Ãÿ˝ Ã@˛˝
  2054. Ä`>f`ÿê=ò33? ˛ 033?? Ãà0Ãÿ˝ Ã@˛˝
  2055. Ä`ff`¸¿ê=ò330 ˛ 0330? Ãà0Ãÿ˝ Ã@˛˝
  2056. Ä`ff`¿¿ê=ò331&d ˛ 0331&`û@ÃÃ0˛Ã˝ ÿ@˛˝
  2057. Äbffdƒ¿ê=ò·„„d ˛ 0`Ä@ÃÃ0xÃÃ˝ x¿@˛˝
  2058. Ä<>f8x¿ê6ò˛˝ ˝˛aIJ 0¸˝ ˛@˛˝Ä˚ê5ò˛˝ ˝#˛˝¿¸˝ ˛@˛˝Ä˚ê)ò˚˝ ˝Ú˝ ˛@˛˝Ä˚ê%ò˚˝ Ì˝ ˛@˛˝@˚ ê%ò˚˝ Ì˝ ˛@˛˝`˚`ê%ò˚˝ Ì˝ ˛@˛˝˚ˇÄêò˚˝ˇ‡Ì˝ˇ‡˛˛ˇ˛ÙêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòÙ<Ú‰ê+ò‡˝p˚√˝<˝√˛0¿@ ˛¿¿ê,ò0˝»¸Åò˝b˝√˛@ ``˛˛¿ê1*ò1„·„`¿Òô≥áå<ÅòÒÒ∞`<8pÒÁè@ p„«ΔcΔáá¿ê1ò2˛3$Ä·ôôΔLÃ~Aôôô¿`Fd…ò√ÄÄy‰ffdf Ãÿê1*ò·Û33qôôÜ ¿~A˘ôôÄ`>p·ò√ÄÄ_cÊfcÊåÃÿê/ ò33Û9ôôÜ¿~AÅôô˘Ä`f8q¯√ÄÄN¸fœÃ¿ê/ ò33ôôÜ ~AÅôôÅÄ`f9Ä√ÄD¸f˛ ¿ê/ò33˛ôÜLL<ÅÅôôâÄbfLôà√Ä@ @¸f LL¿ê1*òÛ·„p˘ÉáåÅĢÒÄ<>8paè@ @cÊc„Êáá¿êò˜√Ĉ0¿Âêò˜<Ĉ‰êòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêòΔêüΔˇÚêêΔêÄΔê≈ˇ˛êˇº@ˇ ˇˇˇˇ@
  2059. ˇ·ˇ‚7^
  2060. 4*\˜, Palatino
  2061. .+l"CHAPTER €`)\1,     Helvetica
  2062.     (@lThe Printing Manager4⁄*˙¯
  2063. (‡*1 )-c)8
  2064.     )9About the Printing Manager
  2065. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2066. °dONLNd\lhõ(el The print rÒ†°dONLNd \õh≠)/ecorf°dONLNd\Æh˝)d has several subrÚ`°dONLNd!\˝h)Oecorf¿°dONLNd%\hû) ds. The printer information subrÙİdONLNdE\ûh∞)éecorh‡°dONLNdI\±h›) d, of type ,
  2067. Courier.°dONLNdThltñ(qlTPrInfo°dONLNd[hñt¨)* (see °dONLNdah¨tÕ)page 1-°dONLNdhhÕt◊)!31°dONLNdjh◊t⁄)
  2068. :), gives you the information needed for page composition, .°dONLNd§tlÄ(}l'including the vertical and horizontal rá°dONLNdÀtÄÒ)®3esolution of the printer in dpi and the boundaries °dONLNd˛Älå£(âl
  2069. of the page rΔ†°dONLNd Ä£åÃ)7Dectangle (which is determined in the style dialog box, discussed on E`°dONLNdOÄÕå‰(âÕpage .°dONLNdTålòu(ïl1-°dONLNdVåuòz)    6°dONLNdWåzòfi)). The printing job subrR`°dONLNdoåfiò)decor$¿°dONLNdsåò) d, of type $¿°dONLNd~åòA)-TPrJob$¿°dONLNdÑåAòW)$ (see $¿°dONLNdäåWòx)page 1-$¿°dONLNdëåxòÇ)!31$¿°dONLNdìåÇòÔ)
  2070. ), gives you information .°dONLNd¨òl§E(°l4about a particular printing job; for instance, the fi∞†°dONLNd·òE§‚)Ÿ&rst and last pages to be printed, the °dONLNd§l∞È(≠lUnumber of copies, and the method of printing the Printing Manager will use. The user °dONLNd\∞lº$* -sets its contents using the job dialog box.  V¿°dONLNdâ∞%º')π 
  2071. …*÷¯4 *’¯,
  2072.  
  2073. Zapf Dingbats
  2074. °dONLNdˇˇ(–Xs
  2075. °dONLNdˇˇ+WúİdONLNdˇˇ)ARNING
  2076. ˇ·ˇ‚7^
  2077. °dONLNdã”lflr(‹lY@İdONLNdå”rflj)9our application should not change the data in the print rs@°dONLNd≈”jfl|)¯ecorÁ†°dONLNd…”|flò)d—be °dONLNdŒfllÎz(Ëlsurâ °dONLNd—flzΜ)e to use the standar'@°dONLNdÂfl–΢)V1d dialog boxes to set this information. The only °dONLNdÎl˜r(Ùlfiå¿°dONLNdÎr˜Ó)elds you may need to set dirP¿°dONLNd4ÎÔ˜)}ectly arâİdONLNd<Θà) e some containing optional °dONLNdW˜l    (l$information in the printing job subrp‡°dONLNd{˜    )ùecorÂ@°dONLNd˜û)d (for example, the pointer to °dONLNdûlô( l the idle pr⁄†°dONLNd©ô∑)-ocedurq‡°dONLNdØ∏≈)e). 1°dONLNd≥≈Z)
  2078. "Attempting to set other values dir”‡°dONLNd’Zç)ï
  2079. ectly in the °dONLNd‚là(lprint rµ‡°dONLNdÈàö)ecor*@°dONLNdÌõø)d can prN¿°dONLNdıø)$oduce unexpected rİdONLNd4)Wesults. 
  2080. ä°dONLNdˇˇ)!s
  2081. ≠°dONLNdˇˇ)  °dONLNd&!l-r(*lY@İdONLNd'!r-Å)=our application should contain a printing loop, which is wherÁ°dONLNdd!Å-Ë(*Åe all the printing needs °dONLNd}-l9t(6larE°dONLNd-u9‹)    e handled, including pr‡ °dONLNdñ-‹9Ù)g?esenting the job dialog box and determining the range of pages °dONLNd’9lE©(Blto be printed. ˇˇï(.°dONLNdÂKlWO*3In the printing loop, you open the Printing Managerk‡°dONLNdKOWâ)„, initialize a ˇ˛øx+X°dONLNd'KäW∫);grafPortˇˇï(+X°dONLNd/K∫W¯)0 data type for .°dONLNd>Wlcï(`l@the document (“open” the document), and calculate the bounding r˜@°dONLNd~Wïcı(`ïectangle for one page °dONLNdîclo“(llNof the document (“open” a page). Each page needs to be opened and closed befor™°dONLNd‚c“oÏ(l“e you °dONLNdËol{‚(xlRcan handle any subsequent page of the document, so that you can determine exactly °dONLNd:{lá%* &how much information of the document ficİdONLNda{&á®)∫ts on each page. When you arM°dONLNd}{®áº)Çe thro`°dONLNdÇ{ºáÏ)
  2082. ough with °dONLNdåálì¿(êlKthe pages, you then close the document and close the Printing Manager beforÓ°dONLNd◊á¿ìÎ(ê¿
  2083. e ending. °dONLNd·ìlür(úlY@İdONLNd‚ìrü    )"ou must always issue the closing rL†°dONLNdì    ü†)ó!outine that matches any opening rD¿°dONLNd%ì†ü’)ó
  2084. outines (for .°dONLNd2ül´ñ(®l
  2085. instance, °dONLNd<üñ´Ã)*    PrOpenDoc°dONLNdEüô·)6 and °dONLNdJü·´)
  2086. PrCloseDoc°dONLNdTü´Ó)<2), even if the user has aborted printing or if an .°dONLNdÜ´l∑x(¥lerr@°dONLNdâ´y∑í)
  2087. or is rS¿°dONLNdê´í∑)eturned by the open calls. °dONLNd¨Ωl…((Δl*An example of a printing loop is shown in w°dONLNd÷Ω)…W)Ω Listing 1-1@°dONLNd·ΩX…h)/ on ^ °dONLNdÂΩh…à)page 1-凰dONLNdÏΩà…í) 12凰dONLNdÓΩí…î)
  2088. .
  2089. Ô*ı¯4Ô*Ù¯ ÔlÔ¯
  2090. ˇ·ˇ‚7^
  2091. ˇˇ◊ˇ◊°dONLNd›lÓ∏(Íl The Idle Pr¥∞°dONLNd˚›∏ÓË)Locedur¥°dONLNd›ËÓÔ)0eˇˇˇˇˇˇ®(Í1
  2092. °dONLNdÙlr(˝lY@İdONLNdÙrÃ)ou can designate an G`°dONLNdÙÃ)Zidle procedure§¿°dONLNd&Ù,)B to be r İdONLNd.Ù-‹)%un whenever the Printing Manager has °dONLNdSl x(    ldirI °dONLNdVy Ì)
  2093. ected output to the printer:`°dONLNdqÌ )t . It stops ṙ°dONLNd} v)+unning once the entirIİdONLNdíw ˆ)_e document has been sent to °dONLNdÆ l›(lthe printer and does not rw`°dONLNd» ›≠)q1un while the printer actually prints. The idle prù†°dONLNd˘ ≠À)–ocedur4‡°dONLNdˇ ÃÏ)e takes °dONLNd    l$≈(!lno parameters and r«°dONLNd    ≈$ı)Y eturns no rÁ°dONLNd    %ı$ï)0$esult; the Printing Manager simply r!¿°dONLNd    Iñ$◊)°uns it at every °dONLNd    Y$l0°(-l opportunity‡°dONLNd    d$°0¶)5. °dONLNd    g6lB˛(?l!Some applications use the idle prØ °dONLNd    à6˛B)íocedurF`°dONLNd    é6B9)e to prè°dONLNd    ï69B‚)'oduce a dialog box, such as the one in °dONLNd    ºBlNÑ(KlFigurR¿°dONLNd    ¡BÑNò)e 1-4@°dONLNd    ΔBòN«) , on the scrÜ¿°dONLNd    “B»N‡)0@een that informs the user that the document is printing and the °dONLNd
  2094. NlZG(Wl-Command-period command will cancel printing. ˇ!Ü@ˇ ˇˇˇˇ@
  2095. ˇ·ˇ‚7^
  2096. 4H\, Palatino
  2097. .+ä"CHAPTER €`)\1,     Helvetica
  2098.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2099. 
  2100. ‡(‡1ù)-‡)9
  2101. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2102. gHw4gHw"gH_
  2103. ˇ·ˇ‚7^
  2104.     °dONLNdˇˇ(dä
  2105. Figure 1-4°dONLNd\Ãg“)BA0°dONLNd\“g-) sample idle procedure
  2106. °dONLNd–ä‹(Ÿä If you don’t designate a idle prû‡°dONLNd8–‹0)àocedur6 °dONLNd>–1‹Û).e, the Printing Manager uses its default idle °dONLNdl‹äËì(ÂäprG °dONLNdn‹îË≤)
  2107. ocedurfi`°dONLNdt‹≤Ë)e. The printing job subr °dONLNdå‹Ë,)hecorvİdONLNdê‹,Ël)d of the print rÓ‡°dONLNd†‹lË~)@ecorc@°dONLNd§‹Ë)!d contains a pointer to the idle .°dONLNd≈ËäÙî(ÒäprR`°dONLNd«ËîÙ±)
  2108. ocedur$¿°dONLNdÕ˱ْ)    e in the ,
  2109. Courier$¿°dONLNd÷Ë’Ù )$    PIdleProc$¿°dONLNdflË Ù)6 fi$¿°dONLNd‚ËÙL)    
  2110. eld.  For mor˜ °dONLNdÔËKÙÔ)7#e information about what to be awar…İdONLNdËÔÙ)§e of .°dONLNdÙä≠(˝äwhen cr¯†°dONLNdÙ≠Ô)#eating a idle prJ¿°dONLNd.Ù)Cocedur‚°dONLNd4Ù()e, see ˚‡°dONLNd;Ù(7)“W>İdONLNd=Ù7|)riting an Idle PrÒ°dONLNdNÙ|ö)Eocedurà@°dONLNdTÙõ’)
  2111. e” on page 1-«Ä°dONLNdaÙ’fl):25«Ä°dONLNdcÙflÊ)
  2112. .  GİdONLNdfÙÁÏ)  GİdONLNdhÙÏÓ) 
  2113. H!4H!
  2114. 2H:43H: 3H3
  2115. ˇ·ˇ‚7^
  2116. ˇˇ£‰ˇÆ°dONLNdjH1(-HUsing the Printing Managerˇˇˇˇˇˇ⁄|(- 1
  2117. °dONLNdÖAäMê(JäY@İdONLNdÜAêM )Vou can use the Printing Manager to print documents, to display and alter the printing °dONLNd‹MäY9(Vä(dialog boxes, and to handle printing errÓ°dONLNdM9Yπ)Øors. The Printing Manager pri@°dONLNd M∫Y›)Åovides r‘¿°dONLNd(M›Y)#
  2118. outines that °dONLNd5Yäe\(bä.give your application device-independent contr@°dONLNdcY]eø)”ol over the printing pr&`°dONLNdzYøe€)bocess. °dONLNdÇkäwL(tä+All printable documents must have a print r  °dONLNd≠kMw_)√ecorİdONLNd±k_wû)d. Each print rÆÄ°dONLNd¿kûw∞)?ecor"‡°dONLNdƒk±w·) d contains °dONLNdœwäÉ](Ää/information about page size, number of copies r!İdONLNd˛w^É
  2119. )‘'equested, and the pages the user wants °dONLNd%Éäè (åäprinted, among other things. ±¿°dONLNdBÉ è)ÅYr@°dONLNdCÉèP)ou should stor7‡°dONLNdQÉQèá)@e this print rpİdONLNd_Éáèô)6ecor‰‡°dONLNdcÉôè)d with the document so °dONLNdzèäõ¸(òäthat you can save the userÎİdONLNdîè˝õ)s’s pr6‡°dONLNdôèõ!)efer„°dONLNdùè!õ>)ences. °dONLNd•°ä≠ê(™äTµ¿°dONLNd¶°è≠…)o print a userY‡°dONLNd¥°À≠ )<’s document, fi§‡°dONLNd√° ≠")Arst crà°dONLNd…°"≠À)'eate or validate the document’s print r˙ °dONLNd°À≠›)©ecornİdONLNdÙ°fi≠) d. Then you °dONLNd≠äπ‹(∂äMshould have a printing loop that handles printing and checks for printing errH¿°dONLNdM≠›π(∂›
  2120. ors at every °dONLNdZπä≈£(¬ästep.  °dONLNdbÀä◊ê*Y@İdONLNdcÀê◊‚)Mou should never assume what type of printer has been selected; that is, your °dONLNd∞◊ä„§(‡äAapplication should always be able to print to any type of printerÛ‡°dONLNdÒ◊£„®(‡£. °dONLNdÙÈäıê(ÚäTµ¿°dONLNdıÈèı)o use the Printing Manager,@°dONLNdÈı>)x , you must fiü@°dONLNdÈ>ı®)7rst initialize QuickDraw_ °dONLNd4È®ı˚)j, the Font Manager)İdONLNdFÈ˚ı)S, the °dONLNdLıäî(˛äWÛ`°dONLNdMıìŸ)    
  2121. indow ManagerͰdONLNdZıŸ2)F, the Menu Manager≥`°dONLNdlı2=)Y, TÈ °dONLNdoı<Ã)
  2122. extEdit, and the Dialog Manager1¿°dONLNdéıÃÍ)ê. The fiz@°dONLNdñı͘)rst .°dONLNdöä
  2123. fl(
  2124. äPrinting Manager rR`°dONLNd¨fl
  2125. &)Uoutine to call is R`°dONLNdæ&
  2126. J)GPrOpenR`°dONLNdƒJ
  2127. y)$ ; the last r$¿°dONLNd–y
  2128. ¿)/outine to call is $¿°dONLNd‚¿
  2129. Í)GPrClose$¿°dONLNdÈÍ
  2130. Ì)*.
  2131. 3H944H9 4ä4
  2132. ˇ·ˇ‚7^
  2133. ˇˇ◊.ˇ◊°dONLNdÎ!ä2õ(.äCrè °dONLNdÌ!õ2|) eating and Using the Print Recorˆ °dONLNd
  2134. !|2Ö)·dˇˇˇˇˇˇ®)í1
  2135. °dONLNd8äDü(AäIn orj`°dONLNd8üDu)1der to print a document, you need a valid print r˘‡°dONLNdE8uDá)÷ecorn@°dONLNdI8àD¸)d that is formatted for the °dONLNdeDäPú(MäcurrذdONLNdiDúP†);ent versions of the Printing Manager and the printer driver•†°dONLNd§D†P‘(M†
  2136. . The print r@°dONLNd±D’PÁ)5ecorㆰdONLNdµDÁP)d has °dONLNdªPä\_(Yä1information such as the vertical and horizontal rá°dONLNdÏP_\ˆ)’%esolution of the printer in dpi, the °dONLNd\ähı(eäboundaries of the page r†°dONLNd)\ˆh )l?ectangle, the number of copies, and the method of printing the °dONLNdhhätµ(qä
  2137. user has rS¿°dONLNdrhµtfl)+    equested.°dONLNd|zäÜê(ÉäTµ¿°dONLNd}zèÜü)o cr‡Ä°dONLNdÅzüÜÏ)eate a new print r^°dONLNdìzÌܡ)Necor“`°dONLNdózˇÜ<)
  2138. d, you must fia °dONLNd•z=ÜS)>rst crà`°dONLNd´zSÜÛ)$eate a handle to it with the Memory .°dONLNdœÜäí⁄(èäManager function °dONLNd‡Ü⁄í)P    NewHandle°dONLNdÈÜí)6. R`°dONLNdÎÜí)Yg`°dONLNdÏÜí\)ou then must fig`°dONLNd˚Ü\í)All the fig`°dONLNdÜíµ)#
  2139. elds of the r9¿°dONLNdܵí«)6ecor  °dONLNdÜ«íË)d with °dONLNdíäû†(õäapprR`°dONLNd í†û2)!opriate values; for example, use R`°dONLNdAí2ûz)í PrintDefaultR`°dONLNdMízûØ)H
  2140.  to set the fiR`°dONLNd[íØû)5elds to the default .°dONLNdoûä™∫(ßä values storV@°dONLNdzû∫™)0ed in the printer driver¿°dONLNdíû™$)e. 
  2141. wäπ4wäπòÄ*]HHHdˇˇˇˇˇˇ]Hzå∂aÿˇÄ⁄Ä⁄ü⁄ˇ˘ü⁄ˇ˘ò⁄ò⁄ò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò>¿0|``
  2142. Äêò3˛$f˛`
  2143. Äêò36œè3·6fc«√ƒp<Ò„dÄêò38ÃΔ3306fdff`»3c3âÔêò>0ÃΔ330fcÊf`‡3c3Óê    ò00ÃΔ330˛fg‡p?cÛÓê    ò00ÃΔ330˝f80cÓê    ò00ÃΔ330˝f ò1cÓêò00Ã√31|cÊc¿p 1„Óê ò˙0‚ê ò˚0‚ê ò˚‡‚êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄ê#ò~˚00˛åcÄ˝Ä¿˙ê#ò˚00˛åîÅÄ˝Ä¿˙ê+$òx0·„Ò„3>œáÄîÅòÒòÅÊg√¿<˛ê*
  2144. òà ëôô30˛3˝3åÿ±ôòôôÄΔff`F˛ê*
  2145. òà ôò30˛3˝3åÿ·ôòôôÄΔff`>˛ê*
  2146. òà ôò?0˛3˝3圿¡˘òôôÄΔfg‡f˛ê*
  2147. òà ôò00˛3˝3åÃîÅ·ÅòôôÄΔfff˛ê+òà ˛ô13˛33323åÃ@îűâòôôÄΔff f˛ê+$òxôé31„Ò„¸3ëÄcò¯ôèÄcÁ√¿>˛êò˘¸f˚êò˘Ò˝f˚êòÁ˝¿˚êò⁄êò⁄êò⁄ê ò˙ @„êò˝¿¿@ „ê
  2148. ò˚¿¿0„ê    ò>6«á¿¿0„ê    ò338Ãÿ¿0„ê    ò330Ãÿ¿0„ê    ò3?0Ãÿ¿0„ê    ò300Ãÿ¿0„ê    ò310ÃÿΔ3„ê    ò>0«á¿F#„êò0¸ @„ê    ò0‹êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êò⁄êü⁄ˇ˘êü⁄ˇ˘êÄ⁄êÄ⁄êÿˇêˇ ˙@ˇ ˇˇˇˇ@
  2149. ˇ·ˇ‚7^
  2150. 4*\˜, Palatino
  2151. .+l"CHAPTER €`)\1,     Helvetica
  2152.     (@lThe Printing Manager4⁄*˙¯
  2153. (‡*1 )-c)10
  2154.     )9Using the Printing Manager
  2155. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  2156. Courier
  2157. .°dONLNd\lhÜ(el/prRecHdl := THPrint(NewHandle(SIZEOF(TPrint)));°dONLNd0jlvˆ*PrintDefault(prRecHdl);.°dONLNdHÇlér*Y@İdONLNdIÇréÚ)ou can use an existing print r6†°dONLNdgÇÚé)Äecor´°dONLNdkÇéÁ)4d (for instance, one saved with a document). If you .°dONLNdüélöÃ(óluse an existing print rR`°dONLNd∂éÃöfi)`ecor$¿°dONLNd∫éfiö)    d, be sur˜ °dONLNd√éö9)#e to call the ˜ °dONLNd—é9öu)8
  2158. PrValidate˜ °dONLNd€éuö¥)< function befor…İdONLNdÍé¥öÊ)? e using the .°dONLNdˆöl¶à(£lprint rµ‡°dONLNd˝öà¶ö)ecor*@°dONLNdöõ¶◊)
  2159. d to make sur≥¿°dONLNdö◊¶9)<e it’s valid for the curráİdONLNd'ö9¶Ï)b(ent version of the Printing Manager and °dONLNdO¶l≤ù(Øl for the currH`°dONLNd[¶û≤˝)2ently installed printer|@°dONLNdr¶˝≤)_. °dONLNdu∏lƒr(¡lY@İdONLNdv∏rƒ„)ou should save the print r `°dONLNdê∏‰ƒˆ)recorÄ¿°dONLNdî∏ˆƒ·)4d when the user closes the document. This saves any °dONLNd»ƒl–u(ÕlprG °dONLNd ƒv–Ü)
  2160. eferÛ@°dONLNdŒƒÜ–Ó)Tences that the user has selected for printing that document, such as orientation of °dONLNd"–l‹Õ(Ÿlthe page or page size. °dONLNd:‚lÓ™*
  2161. Many of the fiâ@°dONLNdH‚™Óˆ)>elds in the print r·°dONLNd[‚ˆÓ)LecorU`°dONLNd_‚    Ó)d ar∂ °dONLNdc‚Ó%)e rƒ¿°dONLNdf‚%Óx) eserved for use by ï`°dONLNdy‚xÓ»)SApple and they ar±Ä°dONLNdä‚»Óı)P e likely to °dONLNdñÓl˙”(˜lchange without notice. K°dONLNd≠Ó”˙r)g%Also, every printer driver uses the fi#†°dONLNd”Ós˙ø)†elds of the print rã°dONLNdÊÓø˙—)Lecorˇ`°dONLNdÍÓ—˙Ÿ)d °dONLNdÏ˙lx(ldif™`°dONLNdÔ˙xÑ) fer凰dONLNdÚ˙Ñö) entlyΔ°dONLNd˜˙ô≥). In or∞`°dONLNd˛˙≥¨)7der to maintain compatibility with the Printing Managerâ`°dONLNd5˙¨¬)˘, ther+¿°dONLNd;˙√”)e ar:`°dONLNd?˙”Ù)e some °dONLNdFl(lguidelines you should follow:,
  2162.  
  2163. Zapf Dingbats
  2164. °dONLNddl"q*n
  2165. °dONLNdfx$I) .Do not test for the contents of undocumented fi¬†°dONLNdïI$])—elds.
  2166. °dONLNdõ-l4q(3ln
  2167. °dONLNdù*x6≠) Do not set fi¿°dONLNd™*Æ6˙)6elds in the print riİdONLNdΩ*˙6 )Lecor›‡°dONLNd¡* 6!)d dirB¿°dONLNdΔ*"66)ectly¿°dONLNdÀ*668).
  2168. °dONLNdÕ?lFq(Eln
  2169. °dONLNdœ<xH~) Y@İdONLNd–<~HR)1ou should use the existing print dialog boxes, or`°dONLNd<RH‚)‘!, if you want to customize them, °dONLNd"HxTÕ(Qxalter them only as rÿ¿°dONLNd6HÕT)Uecommended in ܰdONLNdDHTÊ)J/“Altering the Style or Job Dialog Box” on page °dONLNdsTx`Ä(]x1-”‡°dONLNduTÄ`ä)23”‡°dONLNdwTä`å)
  2170. .
  2171. Ö*ã¯4Ü*㯠Ülܯ
  2172. ˇ·ˇ‚7^
  2173. ˇˇ◊ˇ◊°dONLNdytlÖ˝(ÅlPrinting a Documentˇˇˇˇˇˇ®(Å1
  2174. °dONLNdçãlóD(îl2The printing loop calls all the Printing Manager r`°dONLNdøãEóÚ)Ÿ'outines necessary to print a document. °dONLNdÊól£
  2175. (†l#The general printing loop shown in ¿°dONLNd    ó £9)ü Listing 1-1 °dONLNdó:£d)/  is an extrê`°dONLNdód£ä)*emely br;¿°dONLNd'óã£ÿ)'oad example of a °dONLNd8£lØ„(¨lUprinting loop—for example, the code does not optimize for the type of  printer being °dONLNdçØlªè* Dused nor for the material being printed (text, graphics, or a mixtur!İdONLNd—ØêªË(∏êe of both). However•‡°dONLNd‰ØÁªÙ)W, it °dONLNdȪl«Ë(ƒlWdoes cover the major aspects of what is needed in a printing loop: the balance of open °dONLNd@«l”<* /and close calls, determining page count, and pr
  2176. @°dONLNdo«=”È)—%oviding support for documents longer .°dONLNdî”lfl{(‹l8than the maximum named by the Printing Manager constant °dONLNdÔ{fl±(‹{    iPFMaxPgs°dONLNd’”±fl∂)6. °dONLNdÿÂlÒa(Ól9The printing loop starts by getting a pointer to the currR`°dONLNdÂaÒq)ıent R`°dONLNdÂqÒ°)grafPortR`°dONLNd°ÒÈ)0. Then it calls a °dONLNd/Òl˝p(˙lrR`°dONLNd0Òp˝ë)outine, R`°dONLNd8Òë˝Ò)!MyUnloadTheWorldR`°dONLNdHÒÒ˝è)`$, that swaps out code segments not r$¿°dONLNdlÒè˝¶)ûequir˜ °dONLNdqÒ•˝—)
  2177. ed during .°dONLNd{˝l    »(lprinting. (The specifi∑İdONLNdë˝»    ı)\ cs of this r¨@°dONLNdù˝ı    )-    outine ar3†°dONLNd¶˝     )(*e left up to the individual application.) Ë °dONLNd–˝…    È)¨At this °dONLNdÿ    l (l$point, it opens the Printing Managera`°dONLNd¸     M)†, printer driver*`°dONLNd     Mä)A, and printer r↰dONLNd    ä¢)=esour—‡°dONLNd     ¢≥)ce fiòİdONLNd%    ¥Ï)le for use by .°dONLNd3l!é(lcalling °dONLNd;é!≤)"PrOpen°dONLNdA≤!µ)$..°dONLNdC'l3€(0lThe loop saves the driverÔ °dONLNd\'‹3È)p’s r8`°dONLNd`'Í3)esourưdONLNde'3)ce fiG@°dONLNdj'3{)le so that if your idle prπ¿°dONLNdÑ'{3ô)gocedurQ°dONLNdä'ö3◊)e changes the °dONLNdò3l?o(<lrE°dONLNdô3p?à)esourç@°dONLNdû3à?fl)ce chain in any wayß °dONLNd±3fi?^)V , the driver does not lose its rê °dONLNd—3^?v)Äesourÿ`°dONLNd÷3v?ù)
  2178. ces. (See ˆ °dONLNd‡3ù?¨)'“W8¿°dONLNd‚3¨?Á)riting an Idle .°dONLNdÒ?lKv(HlPrR`°dONLNdÛ?vKì)
  2179. ocedur$¿°dONLNd˘?ìKÃ)
  2180. e” on page 1-$¿°dONLNd    ?ÃK÷)925$¿°dONLNd    ?÷KÛ)
  2181. .) The $¿°dONLNd    ?ÛK;) PrintDefault$¿°dONLNd    ?;KG)H pr˜ °dONLNd    ?FKc) ocedur…İdONLNd    $?cKq)e fi…İdONLNd    (?qKÆ)lls the print rõ‡°dONLNd    7?ÆK¿)=ecorn@°dONLNd    ;?¿KÛ) d with the .°dONLNd    FKlW…(Tldefault values specifiı†°dONLNd    \K…W)]ed by the curr~ °dONLNd    jKWÔ)>5ent printer driver; the user may change these values °dONLNd    üWlc
  2182. (`l%with the style and job dialog boxes. °dONLNd    ≈iluÅ*In orj`°dONLNd     iÅuΩ)Hder to print the document, you must divide the data into sections that fiñ`°dONLNd
  2183. iΩuÚ(rΩ
  2184. t within the °dONLNd
  2185.  ulÅá(~lpage r‡°dONLNd
  2186. &uàÅØ)Dectangle dimensions set by the user in the style dialog box and stor°dONLNd
  2187. juØÅ◊(~Ø
  2188. ed in the .°dONLNd
  2189. tÅlçä(älrPage°dONLNd
  2190. yÅäçê) fPİdONLNd
  2191. {Åêç˚)ield of the printing job r"‡°dONLNd
  2192. ïÅ˚ç
  2193. )kecorı@°dONLNd
  2194. ôÅ ç+)d. The ı@°dONLNd
  2195. †Å+ç©)MyDetermineNumOfPagesı@°dONLNd
  2196. µÅ©çÙ)~ function must be .°dONLNd
  2197. «çlôà(ñlspecifiÓ °dONLNd
  2198. ŒçàôÒ)Rc to the application, because the way the application divides up the data depends °dONLNd  ôl•G(¢l2on the type of text and graphics in the document. ˇ ä@ˇ ˇˇˇˇ@
  2199. ˇ·ˇ‚7^
  2200. 4H\, Palatino
  2201. .+ä"CHAPTER €`)\1,     Helvetica
  2202.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2203. ~¿(‡1
  2204. ‡)-a¿)11
  2205. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2206. °dONLNd\ähì(eä;After determining the number of pages, the printing loop pr7 °dONLNd;\îh(eîesents the user with the job °dONLNdXhät„(qädialog box. The user`°dONLNdlhÂtÚ)[’s rY†°dONLNdphÚt*)
  2207. esponses herǰdONLNd|h*t;)8e pr›†°dONLNdÄh;t),ovide information such as the number of the °dONLNd¨täÄ/(}ä$copies and the page numbers of the fi› °dONLNd—t/ÄÇ)•rst and last pages r‡°dONLNdÂtÉÄÍ)Tequested. The loop stor‰@°dONLNd¸tÈÄ
  2208. )f    es these ˇˇ‡Ë.°dONLNdÄäå(âä"values in local variables such as ,
  2209. Courierˇˇ¢∏≈p°dONLNd'ÄåS)ì    firstPageˇˇ‡Ë≈p°dONLNd0ÄSåg)6 and ˇˇ¢∏á@°dONLNd5Ähåò)lastPageˇˇ‡Ëá@°dONLNd=Äòå¡)0 . It then r¸X°dONLNdHÄ¡å))esets the values of .°dONLNd\åäò†(ïäthe fiÍ °dONLNdbå†òE)(rst and last pages in the printing job r2†°dONLNdäåFòX)¶ecorß°dONLNdéåXòÙ)$d as 1 and 9999 (using the constant .°dONLNd≤òä§∫(°äiPrPgMax°dONLNd∫ò∫§√)0). .°dONLNdæ™ä∂’(≥äThe loop comparí °dONLNdÕ™’∂)KHes the values of the number of pages in the document with the last page °dONLNd∂ä¬≥(øä
  2210. the user r"¿°dONLNd∂¥¬%)*equested. If the user has rİdONLNd:∂%¬ )q5equested the printing loop to print page 50 of a two-°dONLNdo¬äŒ$(Àä"page document, the printing loop rFİdONLNdë¬%Œ¯)õ3esets the value of the last page to 2. This avoids °dONLNdƒŒä⁄Ω(◊ä printing errª°dONLNd–ŒΩ⁄()3ors later on in the loop.  °dONLNdχäÏ'(Èä%At this point, the loop begins the pre°dONLNd‡'϶)ùocess of sending the pages of%`°dONLNd.‡ßÏ    )Äf to be printed. It puts °dONLNdGÏä¯(ıä up the dialog box of the idle pr!İdONLNdgϯ1)âocedur∏¿°dONLNdmÏ1¯O)e and r4İdONLNdtÏP¯e)estor∏°dONLNdyÏe¯Ω)es the printer driverfl¿°dONLNdéÏæ¯À)Y’s r)°dONLNdíÏï‰)esourq@°dONLNdóω¯ )
  2211. ce chain. °dONLNd¢˛ä
  2212. Δ(äKOnce in the page loop, the printing loop checks to see if the size of the fi' °dONLNdÓ˛«
  2213. ‰(«le is grR†°dONLNdˆ˛‰
  2214. ) eater than .°dONLNd
  2215. ä“(äHthe maximum number of pages that can be printed (given by the constant  °dONLNdI
  2216. “(“    iPFMaxPgs°dONLNdR
  2217. )6). °dONLNdUä"√(äFIf the user has chosen immediate printing, your application can print °dONLNdõ√"˘(√    iPFMaxPgs°dONLNd§˘"˚)6 .°dONLNd•"ä.˝(+äTnumber of pages and then begin the printing loop again with the next section of the °dONLNd˘.ä:8* 'document. If the user has chosen deferr¢ °dONLNd .8:ï)Æed printing and the fiòİdONLNd6.ñ:µ)^    le is lar@°dONLNd?.∂:›)     ger than .°dONLNdH:äF¿(Cä    iPFMaxPgs°dONLNdQ:¿Fä)6., the loop closes the document and sends the fPİdONLNd:äF˙) irst 128 pages to a spool f!°dONLNdö:˙F)pile to .°dONLNd°FäRº(Oä be printed. ˘‡°dONLNd≠FºR¬)2Y∫`°dONLNdÆF¬RÊ)Aou then must go back and print the next portion of the document. ú@°dONLNdÔFÊRÏ(OÊY\¿°dONLNdFÏR )ou can .°dONLNd˜Rä^„([äprint any number of °dONLNd R„^)Y    iPFMaxPgs°dONLNdR^D)6
  2218.  pages, prR`°dONLNdRD^)+*ovided you only send that many at any one .°dONLNdH^äj¢(gätime. .°dONLNdOpä|€*KThe loop then opens a page for printing and draws the page in the printing °dONLNdöp€| (y€grafPort°dONLNd¢p |
  2219. )0 ˇˇ.X°dONLNd£|äà≥(Öä    with the ˇ˝ã‹∞°dONLNd¨|≥àı)) MyDrawStuffˇˇ.X‹∞°dONLNd∑|ıà)B pr›h°dONLNd∫|à) ocedurØ»°dONLNd¿|àå)e, the details of which ari‡°dONLNd⁄|çà±)pe specifiò8°dONLNd„|±à)$c to the application. In ˇˇß‘°dONLNd¸àäî~(ëä8this loop, the parameters contain the size of the page r‡®°dONLNd4à~î∫)Ùectangle, the ˇ˛˜|0P°dONLNdBàªîÎ)=grafPortˇˇß‘0P°dONLNdJàÎî)0  selected, .°dONLNdUî䆡(ùäTand the page number to be printed. The application can use the same code to print a °dONLNd©†ä¨è* :page of a document as it uses to draw the same page on scrz°dONLNd„†è¨£(©èeen. °dONLNdÈ≤äæ›(ªäWhen the loop is fi—`°dONLNd¸≤›æ)SHnished printing, it closes the document. If the user has selected spool .°dONLNdDæä Ï(«äprinting, you call the °dONLNd[æÏ ")b    PrPicFile°dONLNddæ" .)6 prR`°dONLNdgæ. K) ocedur$¿°dONLNdmæK ¬)e, which sends the spool fi$¿°dONLNdàæ¬  )wle to the printer .°dONLNdö ä÷•(”ädriver‡°dONLNd† •÷ã). The printing loop then closes the Printing Manager†°dONLNd‘ ã÷ì)Ê, rfl†°dONLNd◊ ì÷)eports any Printing Manager .°dONLNdÛ÷ä‚ó(fläerrR`°dONLNdˆ÷ó‚¿)
  2220. ors, and r$¿°dONLNd    ÷¿‚Í))
  2221. esets the $¿°dONLNd    
  2222. ÷Í‚)*grafPort$¿°dONLNd    ÷‚ )0 r˜ °dONLNd    ÷‚1)ecor…İdONLNd    ÷1‚ï)d to the original port. .°dONLNd    1ËäÙ@(Òä+At the end of the printing loop, all open r| °dONLNd    \Ë@Ùÿ)∂"outines to the Printing Manager ar©°dONLNd    ~ËÿÙ    )ò e balanced °dONLNd    âÙäΩ(˝ä with close rl‡°dONLNd    ïÙΩ)3outines. This is extr"¿°dONLNd    ™Ù)V9emely important to do, even if you stop printing because °dONLNd    „ä Ø(    ä    of an errú°dONLNd    ÏØ ∏)%orF¿°dONLNd    Ó∏ ◊)    . Failurr¿°dONLNd    ˆ◊ ˇ)Ee to call the matching close calls can cause the Printing Manager to °dONLNd
  2223. ; äÀ(äperform incorr•İdONLNd
  2224. I Àfl)Aectly}İdONLNd
  2225. N fl·)..°dONLNd
  2226. Pä*('ä!Note that every section of the prR`°dONLNd
  2227. q*;)îocedur$¿°dONLNd
  2228. w;*Z)e calls $¿°dONLNd
  2229. Z*Ñ)PrError$¿°dONLNd
  2230. ÜÑ*)* after each Printing Manager °dONLNd
  2231. £*ä6é(3ärR`°dONLNd
  2232. §*é6”)outine. If an err$¿°dONLNd
  2233. µ*”6j)E%or is found, the loop calls a close r˜ °dONLNd
  2234. ⁄*i6ƒ)ñoutine (for instance, ˜ °dONLNd
  2235. *ƒ6Ó)[PrClose˜ °dONLNd
  2236. ˜*Ó6˚)* or °dONLNd
  2237. ˚6äBΔ(?ä
  2238. PrCloseDoc°dONLNd 6ΔBZ)<!) for any Printing Manager open rR`°dONLNd &6ZBÄ)î    outines (R`°dONLNd /6ÄB§)&PrOpenR`°dONLNd 56§B±)$ or R`°dONLNd 96±BÁ)
  2239.     PrOpenDocR`°dONLNd B6ÁB)6) befor$¿°dONLNd I6B )e .°dONLNd KBäN¸(Käalerting the user of the err5†°dONLNd gB˝N)sor‡`°dONLNd iBN
  2240. ). ≤¿°dONLNd kB
  2241. N)Ys@°dONLNd lBNx)ou should use this apprè °dONLNd ÉBxN)h oach in your own application to °dONLNd £NäZ≤(Wämake sur5‡°dONLNd ´N≥ZB)) e the Printing Manager closes pr    °dONLNd ÀNBZË)è$operly and all temporary memory is rëİdONLNd ÔNËZ
  2242. )¶    eleased. ˇ »@ˇ ˇˇˇˇ@
  2243. ˇ·ˇ‚7^
  2244. 4*\˜, Palatino
  2245. .+l"CHAPTER €`)\1,     Helvetica
  2246.     (@lThe Printing Manager4⁄*˙¯
  2247. (‡*1 )-c)12
  2248.     )9Using the Printing Manager
  2249. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2250. g*j¯4g*j¯"g*a
  2251. ˇ·ˇ‚7^
  2252.     °dONLNdˇˇ(dl Listing 1-1°dONLNd\∞g∂)DA0°dONLNd\∂g˝) sample print loop,
  2253. Courier
  2254. .°dONLNds*Œ(|*F{ Below is a general print loop.  The code makes no assumption about }°dONLNd[Å*çº*C{ what printer is being used nor does it take advantage of what's }°dONLNdüè*õ∂*B{ being printed; text, graphics, whatever.  Depending on how you }°dONLNd‚ù*©¬*D{ implement your own print loop for your application, you can make }°dONLNd'´*∑∞*A{ it robust with print status dialogs and idle procs or simpler }°dONLNdiπ*≈∂*B{ without them.  You must remember to balance the open and close }°dONLNd¨«*”∂*B{ calls to the Printing Manager.  Failure to do so can cause the }°dONLNdÔ’*·>*.{ Printing Manager to not perform correctly. }°dONLNdÒ*˝Æ*PROCEDURE MyPrintLoop;°dONLNd7
  2255. *<*VAR°dONLNd<6'`+ copies:°dONLNdI¢'“)lInteger;°dONLNdS)65r(26
  2256. firstPage:°dONLNdc)¢5“)lInteger;°dONLNdm76Cl(@6    lastPage:°dONLNd|7¢C“)lInteger;°dONLNdÜE6Qê(N6numberOfCopies:°dONLNdõE¢Q“)lInteger;°dONLNd•S6_x(\6 pageNumber:°dONLNd∂S¢_“)lInteger;°dONLNd¿a6mÑ(j6
  2257. printResFile:°dONLNd”a¢m“)lInteger;°dONLNd›o6{x(x6 printError:°dONLNdÓo¢{“)lInteger;°dONLNd¯}6âä(Ü6numberOfPages:°dONLNd }¢â“)lInteger;°dONLNdã6óf(î6oldPort:°dONLNd$ã¢ó“)lGrafPtr;°dONLNd.ô6•r(¢6
  2258. theStatus:°dONLNd>ô¢•fi)l
  2259. TPrStatus;°dONLNdKµ*¡H(æ*BEGIN°dONLNdR√6œú+ GetPort(oldPort);°dONLNdgfl6Î⁄*F{MyUnloadTheWorld is your routine to swap out unneeded segments that }°dONLNdØÌ6˘‘*E{ are not required during print time.  Your print code must be in a }°dONLNdˆ˚6Ï*I{ separate code segment.  You need to do this for memory considerations.}°dONLNdC6#ú*MyUnLoadTheWorld;°dONLNdX36?`*PrOpen;°dONLNdaA6MÃ*IF (PrError = noErr) THEN°dONLNd|O6[T*BEGIN°dONLNdÑ]Hiò+8{Save the current resource file so the driver will not }°dONLNdøkHwn*1{ lose its resources upon return from pIdleProc.}°dONLNdˆáHìÍ*printResFile := CurResFile;°dONLNd£HØÿ*PrintDefault(gPrintRec);°dONLNd2±HΩfi*IF (PrError = noErr) THENˇ @ˇ ˇˇˇˇ@
  2260. ˇ·ˇ‚7^
  2261. 4H\, Palatino
  2262. .+ä"CHAPTER €`)\1,     Helvetica
  2263.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2264. ~¿(‡1
  2265. ‡)-a¿)13
  2266. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  2267. Courier
  2268. .°dONLNd\fhÑ(efBEGIN°dONLNd    jxv»+8{MyDetermineNumOfPages is your routine that determines }°dONLNdExxÑ∞*4{ the number of pages contained in the document by }°dONLNd}Üxíº*6{ comparing the size of the document with rPage, the }°dONLNd∑îx†º*6{ printable area for the currently selected printer. }°dONLNdÒ¢xÆ»*8{ It returns the number of pages required to print the }°dONLNd-∞xºŒ*9{ document.  This routine is specific to the individual }°dONLNdjæx “*{ application.}°dONLNdÇ⁄xÊ˛*AnumberOfPages := MyDetermineNumOfPages(gPrintRec^^.prInfo.rPage);°dONLNdÀˆx8* IF (PrJobDialog(gPrintRec)) THEN°dONLNdÔxñ*BEGIN°dONLNd˘ä™+0{Get the number of copies along with the first }°dONLNd. ä,™*0{ and last pages of the document that the user }°dONLNdc.ä:§*/{ wants printed.  Also, pretend you are going }°dONLNdó<äHJ* { to print the entire document.}°dONLNdΩXädí*,numberOfCopies := gPrintRec^^.prJob.iCopies;°dONLNdÓfärz*(firstPage := gPrintRec^^.prJob.iFstPage;°dONLNdtäÄt*'lastPage := gPrintRec^^.prJob.iLstPage;°dONLNdGÇäéJ* gPrintRec^^.prJob.iFstPage := 1;°dONLNdlêäút*'gPrintRec^^.prJob.iLstPage := iPrPgMax;°dONLNdù¨ä∏∞*1{Determine the "real" number of pages contained }°dONLNd”∫äΔ∞*1{ in the document. Without this test, you could }°dONLNd    »ä‘∂*2{ print up to iPrPgMax pages, or at least try to.}°dONLNd?‰fr(Ìf  °dONLNdC‰ä¯)$=IF (numberOfPages < lastPage) THEN lastPage := numberOfPages;°dONLNdää ¬*4{Install and call your "Print Status Dialog" here. }°dONLNd√äÍ*{ For example: }°dONLNdÿä(Ê*:{ printStatusDlg := GetNewDialog(257, NIL, pointer(-1)); }°dONLNd*ä6‡*9{ gPrintRec^^.prJob.pIdleProc := @checkMyPrintDlgButton;}°dONLNd[FäRò*-{Print the number of copies of the document }°dONLNdçTä`º*3{ requested by the user from the print job dialog.}°dONLNd pä|b*$FOR copies := 1 TO numberOfCopies DO°dONLNdÛ~ää®*BEGIN°dONLNd˛åúò™+-{Restore the printer driver's resource file.}°dONLNd1öú¶2*UseResFile(printResFile);ˇ
  2269. Ú@ˇ ˇˇˇˇ@
  2270. ˇ·ˇ‚7^
  2271. 4*\˜, Palatino
  2272. .+l"CHAPTER €`)\1,     Helvetica
  2273.     (@lThe Printing Manager4⁄*˙¯
  2274. (‡*1 )-c)14
  2275.     )9Using the Printing Manager
  2276. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  2277. Courier
  2278. .°dONLNd\~hÄ(e~+{Print the range of pages of the document }°dONLNd1j~vå*-{ requested by the user from the job dialog.}°dONLNdjÜ~íz**FOR pageNumber := firstPage TO lastPage DO°dONLNdöî~†ú*BEGIN°dONLNd¶¢êÆÏ+:{Check for max size of spool file.  If it is larger than }°dONLNdÁ∞꺬*3{ a multiple of 128, then close the doc, initiate }°dONLNd!æê º*2{ printing, and reopen the doc.  Notice that the }°dONLNdZÃêÿ⁄*7{ IF statement is always true the first time through, }°dONLNdò⁄êÊå**{ thus ensuring the doc is always opened.}°dONLNd—ˆêº*2IF (pageNumber - firstPage) MOD iPFMaxPgs = 0 THEN°dONLNd
  2279. êÆ*BEGIN°dONLNd¢\+IF pageNumber <> firstPage THEN°dONLNd> ¢,¿*BEGIN°dONLNdL.¥:J+PrCloseDoc(gPrinterPort);°dONLNdn<¥H⁄*1IF (gPrintRec^^.prJob.bJDocLoop = bSpoolLoop) AND°dONLNd©JΔVJ+(PrError = noErr) THEN°dONLNd…XΔd‡*/PrPicFile(gPrintRec, NIL, NIL, NIL, theStatus);°dONLNdf¢r∫(o¢END;°dONLNd t¢Äº*/gPrinterPort := PrOpenDoc(gPrintRec, NIL, NIL);°dONLNdBÇêé®(ãêEND;°dONLNdMêêú&*IF (PrError = noErr) THEN°dONLNdmûê™Æ*BEGIN°dONLNdz¨¢∏V+PrOpenPage(gPrinterPort, NIL);°dONLNd†∫¢Δ8*IF (PrError = noErr) THEN°dONLNd¡»¢‘∂*.{The rPage field of the prInfo record is the }°dONLNd˜÷¢‚∞*-{ printable area for the currently selected }°dONLNd,‰¢º*/{ printer. If you send the current port, your }°dONLNdcÚ¢˛û**{ app can use the same routine to draw to}°dONLNdï¢ û**{ the screen and the printer's GrafPort. }°dONLNdœ¢(Ü*&MyDrawStuff (gPrintRec^^.prInfo.rPage,°dONLNd*Í6º+H#GrafPtr(gPrinterPort), pageNumber);°dONLNd,8¢D>(A¢PrClosePage(gPrinterPort);°dONLNdMFêR®(OêEND;°dONLNdWT~`ñ(]~END;°dONLNdab~n*PrCloseDoc(gPrinterPort);°dONLNdÄp~|§*1IF (gPrintRec^^.prJob.bJDocLoop = bSpoolLoop) AND°dONLNd∏~êä+(PrError = noErr) THEN°dONLNd’åêò™*/PrPicFile(gPrintRec, NIL, NIL, NIL, theStatus);°dONLNd    öl¶Ñ(£lEND;°dONLNd®Z¥r(±ZEND;ˇ*@ˇ ˇˇˇˇ@
  2280. ˇ·ˇ‚7^
  2281. 4H\, Palatino
  2282. .+ä"CHAPTER €`)\1,     Helvetica
  2283.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2284. ~¿(‡1
  2285. ‡)-a¿)15
  2286. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  2287. Courier
  2288. .°dONLNd\fh~(efEND;°dONLNdjTvl(sTEND;°dONLNdÜTíû*7{Get the error before PrClose or the error disappears.}°dONLNdI¢TÆÿ*printError := PrError;°dONLNda∞TºÑ*PrClose;°dONLNdmÃTÿ¯*F{You do not want to report any printing errors until you have fallen }°dONLNdµ⁄TÊ*H{ through the printing loop. This will make sure that ALL of the Print }°dONLNdˇËTÙ¯*F{ Manager's open calls have their corresponding close calls, thereby }°dONLNdGˆT˛*G{ enabling the Print Manager to close properly and that all temporary }°dONLNdêT&*#{ memory allocations are released.}°dONLNdµ H,∂()H=   IF (printError <> noErr) THEN DoError(ePrint, printError);°dONLNdÙ.T:∫+ SetPort(oldPort);°dONLNd<HH`(EHEND;
  2289. hHo4iHo jäj
  2290. ˇ·ˇ‚7^
  2291. .°dONLNd [äi√+B  Printing Fr3@°dONLNd[ƒi):
  2292. om the Finderˇˇˇˇˇˇ(e1
  2293. °dONLNd$oä{ê(xäTµ¿°dONLNd%oè{Ì)o print a document frÔ°dONLNd:oÌ{+)^
  2294. om the Findery`°dONLNdGo+{    )>3, the user selects the document’s icon and chooses °dONLNdz{äáÈ(Ñäthe Print command friİdONLNdé{Èá
  2295. )_?om the File menu. When the Print command is chosen, the Finder °dONLNdÕáäì (êäZstarts up the application and passes information to it indicating that the document is to °dONLNd'ìäü<* (be printed rather than opened on the scr]¿°dONLNdOì<üP)≤een. î¿°dONLNdTìPüV)YU@°dONLNdUìVüÒ)#our application should then do the °dONLNdxüä´√(®ä
  2296. following, prˆ†°dONLNdÖü√´7)9eferably without going thrᇰdONLNdüü8´r)uough its entirWİdONLNd≠üs´«);e startup sequence:°dONLNd¬±åΩì(∫å1..°dONLNd≈±ñΩø)
  2297.     Call the °dONLNdŒ±øΩ)) PrJobDialog°dONLNdŸ±Ωe)B function, described on °dONLNdÒ±eΩÜ)dpage 1-°dONLNd¯±ÜΩê)!43°dONLNd˙±êΩ˝)
  2298. . If the user selected morR`°dONLNd±˝Ω)me °dONLNdΩñ…3(Δñ#than one document, you can use the °dONLNd9Ω3…o)ù
  2299. PrJobMerge°dONLNdCΩo…”)< function, described on °dONLNd[Ω”…Ù)dpage 1-°dONLNdbΩÙ…˛)!46°dONLNddΩ˛…)
  2300. , to .°dONLNdi…ñ’Δ(“ñ apply the rû °dONLNdt…Δ’®)05esults of one job dialog box to all of the documents.°dONLNd´€åÁì(‰å2.°dONLNdÆ€ñÁ/)
  2301. !Print the document or documents. °dONLNd–Ìä˘^(ˆä.Most applications open the document on the scrûİdONLNd˛Ì^˘¥)‘een while printing. °@°dONLNdÌ¥˘)VAlthough this is not °dONLNd'˘ä¥(ä    necessary4‡°dONLNd0˘¥)*, it is helpful to the user¶ °dONLNdK˘ )g. .°dONLNdN äë(äYï°dONLNdO ê„)ou can also print frg`°dONLNdc „O)Som the Finder using the g`°dONLNd{ Og)lpDocg`°dONLNd gi)     °dONLNdÄ i)%Apple event. See the chapter “Finder .°dONLNd•ä#”( äInterface” in the S`°dONLNd¡‘#)JOperating Systeṁ°dONLNd—#N)I  volume of ‡ °dONLNd‹O#î)2Inside Macintosh¬ °dONLNdÏï#∏)F for mor冰dONLNdÙπ#)$e information about °dONLNd#ä/À(,ähow to print fr_İdONLNd#À/    )A
  2302. om the Finderȇ°dONLNd$#/)=.   
  2303. MHT4NHT OäO
  2304. ˇ·ˇ‚7^
  2305. °dONLNd)@äNq(Jä)Printing Each Page as a Separate Documentˇˇˇˇˇˇ(J1
  2306. °dONLNdSTä`ı(]äRSome applications use a method of printing that prints out each page of a spooled °dONLNd•`äl0* &document as a separate print job in or7`°dONLNdÀ`1lm)ßder to avoid rE¿°dONLNdŸ`ml˜)<unning out of disk space while °dONLNd¯läx(uäspooling the document to disk. Õ@°dONLNdlx)ãYç¿°dONLNdlx)7ou should not use this method, known as “spool a page, °dONLNdOxäÑp(Åä6print a page,” because it only works for a printer dir¡†°dONLNdÖxpÑÂ)Êectly connected to the userÚİdONLNd†xÊÑÔ)v’s °dONLNd£ÑäêB(çä(computer (and not to a network) and therR¿°dONLNdÀÑBêS)∏efor™¿°dONLNdœÑSêb)e cr)†°dONLNd”Ñcê
  2307. )%eates device dependence, and because °dONLNd¯êäú™(ôä    it’s extr(†°dONLNdê´ú›)!
  2308. emely slowé@°dONLNd ê‹ú0)1. If the printer is a r5İdONLNd"ê1úm)U
  2309. emote or sharê °dONLNd/êmúÈ)<ed device (such as a LaserW†°dONLNdJêÈú˛)|riter °dONLNdPúä®È(•äprinter or an ImageW¥Ä°dONLNddúÈ®\)_riter printer connected by ›¿°dONLNdú\®})sAppleTë°dONLNdÖú}®)! alk), another application could °dONLNd•®ä¥c(±ä/print a document between the pages of your usert‡°dONLNd‘®d¥ü)⁄
  2310. ’s document. T¿°dONLNd·®ü¥Í);At worst, if both °dONLNdÛ¥ä¿(Ωä!applications printing to the shar@°dONLNd    ¥¿
  2311. )é8ed printer use the “spool a page, print a page” method, ˇ @ˇ ˇˇˇˇ@
  2312. ˇ·ˇ‚7^
  2313. 4*\˜, Palatino
  2314. .+l"CHAPTER €`)\1,     Helvetica
  2315.     (@lThe Printing Manager4⁄*˙¯
  2316. (‡*1 )-c)16
  2317.     )9Using the Printing Manager
  2318. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2319. °dONLNd\lhÁ(elSthe printed documents could end up interleaved. The pages for one of the documents °dONLNdShlt∫* could be out of orÖ °dONLNdeh∫t»)Nderü¿°dONLNdhh»tK), even when printed by itself. 
  2320. í*ô¯4ì*ô¯ îlî¯
  2321. ˇ·ˇ‚7^
  2322. °dONLNdàÖlì•(èl Printing Fr3@°dONLNdìÖ¶ì8):om the Low-Level Interfaceˇˇˇˇˇˇ(èÚ1
  2323. °dONLNdÆôl• (¢l'The low-level interface is the set of rÔ°dONLNd’ô •ª)ü'outines that use the Device Manager dirZ °dONLNd¸ôº•fi)±    ectly to °dONLNd•l±!(Æl*print. Some printer drivers converts the r¬Ä°dONLNd/•!±fl)µ.outines in the low-level interface into their °dONLNd]±lΩˆ(∫lZequivalents in the high-level interface, so you won’t gain a speed advantage by using the °dONLNd∑Ωl…õ* low-level rÿ°dONLNd¬Ωõ…))/!outines. In fact, your code may rô°dONLNd„Ω*…V)è    un slower‚@°dONLNdÏΩU…‚)+". The low-level interface is used °dONLNd…l’‹(“lprimarily on the ImageWı¿°dONLNd%…€’ñ)o-riter printer for printing text and graphics.°dONLNdS€lÁû(‰lGIf you want to use the low-level interface, you should use the code in /‡°dONLNdö€üÁÕ(‰ü Listing 1-2– °dONLNd•€ÕÁÚ).
  2324. , so that °dONLNdØÁlÛË(lthe Printing Manager can pr9`°dONLNd ÁÈÛÛ)}@operly convert the low-level calls to the high-level interface. 
  2325. *¯4*¯"*a
  2326. ˇ·ˇ‚7^
  2327.     °dONLNdˇˇ(l Listing 1-2°dONLNd  ∞^)D-Printing a page using the low-level interface,
  2328. Courier
  2329. .°dONLNd9"l.Æ(+l PrDrvrOpen;°dONLNdL"Δ.b)Z{opens the printer driver}°dONLNdg0l<‘(9l<PrCtlCall(iPrDevCtl, lPrDocOpen, 0, 0); {opens the document}°dONLNd§>lJ¬*9PrCtlCall(iPrDevCtl, lPrPageOpen, 0, 0); {opens the page}°dONLNd„LêXt+$&{Here you send the data to be printed}°dONLNd
  2330. ZlfŒ(cl;PrCtlCall(iPrDevCtl, lPrPageClose, 0, 0); {closes the page}°dONLNdFhlt‡*>PrCtlCall(iPrDevCtl, lPrDocClose, 0, 0); {closes the document}°dONLNdÖvlÇ¥* PrDrvrClose;°dONLNdôvΔÇh)Z{closes the printer driver}.°dONLNdµélöÉ(ólThe rÄ¿°dONLNd∫éÉö)%outines in the low-level interface ar5`°dONLNdfléök)úe documented in ÿ °dONLNdÔéköˆ)L“Low-Level Routines” on page °dONLNd öl¶t(£l1-”‡°dONLNdöt¶~)56”‡°dONLNdö~¶ì)
  2331.  and ¡°dONLNdö)“Low-Level Contr °dONLNd%ö¶;)Qol Calls” on page 1-ò@°dONLNd9ö;¶E)V58ò@°dONLNd;öE¶J)
  2332. . 
  2333. Ã*“¯4Ã*—¯ Ãlï
  2334. ˇ·ˇ‚7^
  2335. ˇˇ◊ˇ◊°dONLNd>∫lÀ(«lChecking for PrGeneralˇˇˇˇˇˇ®(«1
  2336. .°dONLNdU—l›Ä(⁄lThe °dONLNdY—Ä›∂)    PrGeneral°dONLNdb—∂›¬)6 prR`°dONLNde—¬›fl) ocedur$¿°dONLNdk—fl›#)e (described on $¿°dONLNd{—#›∏)D “Optimizing Printing” on page 1-$¿°dONLNdõ—∏›¬)ï51$¿°dONLNdù—¬›È)
  2337.     ) allows .°dONLNd¶›lÈŒ(Êlyou to determine the r!`°dONLNdº›œÈ4)cesolution of the printer °dONLNd‘›4È\)e , set the rİdONLNdfl›\Ⱥ)(esolution you want, fia°dONLNdı›ºÈÙ)`nd out if the °dONLNdÈlı)(Úl,user has selected landscape printing, or forfi °dONLNd/È)ıò)Ωce draft-quality printing. _ °dONLNdJÈôıü)pY†°dONLNdKÈüıœ) ou call the .°dONLNdWıl¢(˛l    PrGeneral°dONLNd`ı¢Æ)6 prR`°dONLNdcıÆÀ) ocedur$¿°dONLNdiıÀ )e with one of fı@°dONLNdxı
  2338. C)?
  2339. ive opcodes: ı@°dONLNdÖıCã)9 GetRslDataOpı@°dONLNdëıãê)H, ı@°dONLNdìıê¿)SetRslOpı@°dONLNdõı¿≈)0, °dONLNdùl
  2340. ¢(
  2341. l    GetRotnOp°dONLNd¶¢
  2342. ß)6, °dONLNd®ß
  2343. È) DraftBitsOp°dONLNd≥È
  2344. ˘)B, or °dONLNd∏˘
  2345. G)
  2346. NoDraftBitsOp°dONLNd≈G
  2347. fl)N". Four of these opcodes have data ˇˇM°dONLNdÁ
  2348. lx(lstrl°dONLNdÍ
  2349. xé) uctur>`°dONLNdÔ
  2350. é)es associated with them. (The fiø∫°dONLNd
  2351. /)éfth, ˇ˝Á6 ðdONLNd
  2352. 0~)
  2353. NoDraftBitsOpˇˇM ðdONLNd!
  2354. ~≠)N
  2355. , serves to rΔb°dONLNd.
  2356. ≠Â)/
  2357. everse the ef2ʰdONLNd;
  2358. ʯ)9fect °dONLNd@l%â("lof the °dONLNdGâ%À) DraftBitsOp°dONLNdRÀ%í)B- opcode and so does not have its own data strl°dONLNdí%®)«uctur>`°dONLNdÑ®%∂)e.) °dONLNdâ+l7?(4l-Not all printer drivers have implemented the °dONLNd∂+?7u)”    PrGeneral°dONLNdø+u7Å)6 prR`°dONLNd¬+Å7û) ocedur$¿°dONLNd»+û7Õ)    e howeverg`°dONLNd—+Ã7Ú).
  2359. , so your .°dONLNd€7lC$(@l+code can’t depend on being able to use it. °dONLNdIlUö* Listing 1-3 @°dONLNdIõU^)/+ shows how to check to see whether the curro°dONLNd=I^Uæ)√ent printer driver has .°dONLNdTUlaº(^limplemented the °dONLNddUºaÚ)P    PrGeneral°dONLNdmUÚa˛)6 prR`°dONLNdpU˛a) ocedur$¿°dONLNdvUa0)e. In $¿°dONLNd|U0a`) Listing 1-3$¿°dONLNdáU`aà)0
  2360. , the curr˜ °dONLNdëUáaÀ)'ent printing err…İdONLNd°UÀaÔ)D
  2361. or is set °dONLNd´almw(jlto °dONLNdÆawm}) 0°dONLNdØa}mä) or °dONLNd≥aäm®)
  2362. noErr¬†°dONLNd∏aßmË). The opcode fi¬†°dONLNd«aËmg)Aeld of the page orientation rï°dONLNd‰agmy)ecorg`°dONLNdËaymú)d (type g`°dONLNdaúmfi)# TGetRotnBlkg`°dONLNd˚afimÓ)B) is °dONLNd    mlyò(vl set to the °dONLNd     mòyŒ),    getRotnOp°dONLNd    mŒyÔ)6A opcode, which is the opcode to determine if the user has chosen .°dONLNd    UylÖ?(Çl/landscape orientation. The code passes the addr—İdONLNd    Ñy?Öπ)”ess of the page orientation r˚@°dONLNd    °yπÖÀ)zecoro†°dONLNd    •yÃÖ)    d to the .°dONLNd    ÆÖlë¢(él    PrGeneral°dONLNd    ∑Ö¢ëÆ)6 prR`°dONLNd    ∫ÖÆëÀ) ocedur$¿°dONLNd    ¿ÖÀë.)e. The code then calls $¿°dONLNd    ◊Ö.ëL)cPrErr$¿°dONLNd    ‹ÖLëâ) to get any err˜ °dONLNd    ÎÖàë≤)<
  2363. ors that r…İdONLNd    ıÖ≤ë“)*esult frõ‡°dONLNd    ˝Ö“ë·) om °dONLNd
  2364. ëlùé(ölcalling °dONLNd
  2365. ëéùƒ)"    PrGeneral°dONLNd
  2366. ëƒùÚ)6 . If the errR`°dONLNd
  2367. ëÚù).or is R`°dONLNd
  2368. #ëù=)    opNotImplR`°dONLNd
  2369. ,ë=ùœ)6", the printer driver does support °dONLNd
  2370. Nùl©¢(¶l    PrGeneral°dONLNd
  2371. Wù¢©Y)6+ but not that particular opcode. If the errR`°dONLNd
  2372. ÇùY©n)∑or is R`°dONLNd
  2373. àùn©∞) resNotFoundR`°dONLNd
  2374. ìù∞©È)B, the printer °dONLNd
  2375. °©lµ’(≤ldriver does not support °dONLNd
  2376. π©’µ )i    PrGeneral°dONLNd
  2377. ¬© µ¢)6$.  The code then sets the function rR`°dONLNd
  2378. Ê©¢µÀ)ó
  2379. esult to Fï°dONLNd
  2380. © µÔ)(    ALSE.    ˇh@ˇ ˇˇˇˇ@
  2381. ˇ·ˇ‚7^
  2382. 4H\, Palatino
  2383. .+ä"CHAPTER €`)\1,     Helvetica
  2384.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2385. ~¿(‡1
  2386. ‡)-a¿)17
  2387. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2388. gHj4gHj"gHa
  2389. ˇ·ˇ‚7^
  2390.     °dONLNdˇˇ(dä Listing 1-3°dONLNd\Œgf)D$Checking for the PrGeneral procedure,
  2391. Courier
  2392. .°dONLNd%sH&(|H%FUNCTION DoIsPrGeneralThere: Boolean;°dONLNdLèHõZ*VAR°dONLNdQùT©ê+ 
  2393. getRotRec:°dONLNd\ùê©ÿ)< TGetRotnBlk;°dONLNdj´T∑ñ(¥T myPrintErr:°dONLNdv´ñ∑∫)BOsErr;°dONLNd«H”f(–HBEGIN°dONLNdÜ’T·¥+ myPrintErr := 0;°dONLNdò„TÔ*getRotRec.iOpCode := getRotnOp;°dONLNdπÒT˝*getRotRec.hPrint := myPrRecHdl;°dONLNd⁄ˇT ÿ*PrGeneral(@getRotRec);°dONLNdÚ
  2394. Tÿ*myPrintErr := PrError;°dONLNd
  2395. T'¿*PrSetError(noErr);°dONLNd)T5û*7IF (myPrintErr = noErr) THEN DoIsPrGeneralThere := TRUE°dONLNdW7TCl*ELSE°dONLNd^EfQ&+ IF (myPrintErr = OpNotImpl) THEN°dONLNdÅSf_å*1{ PrGeneral is supported but this opcode isn't. }°dONLNd∂axm+DoIsPrGeneralThere := TRUE°dONLNd”of{~(xfELSE°dONLNd€}xâD+"IF (myPrintErr = resNotFound) THEN°dONLNdãxó‡*<{ PrGeneral isn't supported by the current printer driver. }°dONLNdBôä•2+DoIsPrGeneralThere := FALSE;°dONLNd_ßH≥`(∞HEND;
  2396. €H·4€H‡ €ä€
  2397. ˇ·ˇ‚7^
  2398. ˇˇ◊.ˇ◊°dONLNdd…ä⁄ö+B&&Determining the Resolution of the Currá`°dONLNdä…ö⁄„(÷ö ent Printerˇˇˇˇˇˇ®)t1
  2399. °dONLNdñ‡äÏè(Èä;Some printer drivers support one of two possible kinds of r5İdONLNd—‡êÏ”(Èêesolution: discrâ °dONLNd·‡”ÏÓ)Cete or .°dONLNdËÏä¯∑(ıä
  2400. variable. R`°dONLNdÚÏ∑¯æ)-Yg`°dONLNdÛÏΩ¯¸)ou can use the g`°dONLNdϸ¯2)?    PrGeneralg`°dONLNd Ï2¯>)6 pr9¿°dONLNdÏ>¯[) ocedur  °dONLNdÏ[¯f)e (  °dONLNdÏf¯á) page 1-  °dONLNdÏá¯ë)!51  °dONLNd Ïë¯)
  2401. ) to determine the kind of .°dONLNd;¯äç(ärE°dONLNd<¯é)esolution supported by the curr†°dONLNd[¯¿)å'ent printer and then use the highest  rW`°dONLNdǯ¿)¶esolution desirÑ`°dONLNdë¯)Aed °dONLNdîä (
  2402. äby the application or the user3İdONLNd≤ )Å. .°dONLNdµä"¡(äDEach printer has its own unique imaging capabilities. When you call °dONLNd˘¡"˜(¡    PrGeneral°dONLNd˜")6 with °dONLNd"ä.∏(+ä
  2403. the value °dONLNd"∏.). GetRslDataOp°dONLNd".#)H     for the °dONLNd'"#.G)#opcode°dONLNd-"G.P)$ fi°dONLNd0"P.)    )eld of the parameter block, the Printing .°dONLNdY.ä:∏(7ä    Manager rW°dONLNdb.∏:Í). eturns the r
  2404. İdONLNdn.Î:å)3&esolutions that the printer supports. 8@°dONLNdî.å:§)°Figur °dONLNdô.§:∏)e 1-5®Ä°dONLNdû.∏:˙) shows the get-.°dONLNd≠:äFé(CärR`°dONLNdÆ:éFΩ) esolution r$¿°dONLNdπ:ΩFœ)/ecor˜ °dONLNdΩ:ŒFı)    ds (type ˜ °dONLNdΔ:ıF1)'
  2405. TGetRslBlk˜ °dONLNd–:1F;)<) r…İdONLNd”:;F¢)
  2406. eturned by the LaserW  °dONLNdË:¢FÛ)griter and ImageWN¿°dONLNd¯:ÚF    )Priter °dONLNd˛FäR7(Oä'printer drivers. Both contain all the fi°dONLNd&F7Ri)≠ elds of the °dONLNd2FiR•)2
  2407. TGetRslBlk°dONLNd<F•R˚)< data type, but the .°dONLNdPRä^¨([äLaserW◊†°dONLNdVR´^ƒ)!riter rˆ@°dONLNd]Rƒ^÷)ecorj†°dONLNdaR◊^L)d has values for the X and µÄ°dONLNd|RL^R)uY3`°dONLNd}RS^Y) rx`°dONLNdRY^¶)esolution range fi °dONLNdëR¶^ˆ)Melds and only one .°dONLNd£^äjé(gärR`°dONLNd§^éjΩ) esolution r$¿°dONLNdØ^Ωjœ)/ecor˜ °dONLNd≥^ŒjÒ)d, wher…İdONLNd∫^Òj;)#eas the ImageW  °dONLNd»^;jV)Jriter rfiİdONLNdœ^Ujg)ecor∞‡°dONLNd”^gj±)d has a value of ∞‡°dONLNd‰^±j∑)J0∞‡°dONLNdÂ^∑jÚ) in the X and É@°dONLNdÛ^Új˘);YU†°dONLNdÙ^˘j˚) .°dONLNdıjävç(särE°dONLNdˆjév€)esolution range fiK¿°dONLNdj€v)Melds and four rK¿°dONLNdjvK)A esolution rn°dONLNd"jKv])/ecor‚`°dONLNd&j]vl)ds. ˇ2b@ˇ ˇˇˇˇ@
  2408. ˇ·ˇ‚7^
  2409. 4*\˜, Palatino
  2410. .+l"CHAPTER €`)\1,     Helvetica
  2411.     (@lThe Printing Manager4⁄*˙¯
  2412. (‡*1 )-c)18
  2413.     )9Using the Printing Manager
  2414. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2415. g*w¯4g*w¯"g*_
  2416. ˇ·ˇ‚7^
  2417.     °dONLNdˇˇ(dl
  2418. Figure 1-5°dONLNd\Æg )BResolutions for LaserWÿ∞°dONLNd\ gP)]riter and ImageWØ–°dONLNd&\Pg)Eriter printers
  2419. .°dONLNd5¿lÃs(…lYï°dONLNd6¿rÃ)ou can also set the imaging rg`°dONLNdS¿Ãd)~esolution you want to use. 9¿°dONLNdn¿dÃk)tYN¿°dONLNdo¿jÃä)ou call ,
  2420. CourierN¿°dONLNdw¿äÿ)     PrGeneralN¿°dONLNdÄ¿¿ÃÌ)6
  2421.  with the ˇˇÇ⁄°dONLNdäÃlÿá(’lvalue ˇ˛àé⁄°dONLNdêÃàÿ∏)SetRslOpˇˇÇ⁄⁄°dONLNdòÃ∏ÿŸ)0     for the ˇ˛àéãh°dONLNd°ßÿ˝)!opcodeˇˇÇ⁄ãh°dONLNdßÃ˝ÿ)$ fiB°dONLNd™Ãÿ•)    $eld of the parameter block and the rtò°dONLNdŒÃ•ÿ¯)üesolutions in the X .°dONLNd‚ÿl‰(·land øÄ°dONLNdÊÿ‰Ö)Y=`°dONLNdÁÿ܉ï) dirÜİdONLNdÎÿï‰3)%ections you want to use via the set-r˘°dONLNdÿ3‰b)û esolution r@°dONLNdÿc‰u)0ecor膰dONLNdÿu‰Ä)d (@°dONLNd"ÿʼn°) page 1-ưdONLNd)ÿ°‰´) 37ưdONLNd+ÿ´‰Ì)
  2422. ). The Printing .°dONLNd;‰lö(Ìl    Manager rR`°dONLNdD‰öÕ). eturns the r$¿°dONLNdP‰Õ˚)3 esult code $¿°dONLNd[‰˚).noErr$¿°dONLNd`‰ô) if it has updated the print r˜ °dONLNd~‰ò™)ecor…İdONLNdlj™Ù)d with this new °dONLNdíl¸p(˘lrR`°dONLNdìp¸©)esolution, or R`°dONLNd°©¸fl)9    noSuchRslR`°dONLNd™fl¸)6  if the curr$¿°dONLNd∂¸ü)/"ent printer doesn’t support this r˜ °dONLNdÿû¸ )ê
  2423. esolution.°dONLNd„lú( l Listing 1-4°dONLNdÓú)0 illustrates how to use the °dONLNd
  2424. I)w    PrGeneral°dONLNdIU)6 prR`°dONLNdUr) ocedur$¿°dONLNdrÌ)e to determine the possible .°dONLNd8lo(lrE°dONLNd9p—)esolutions for the curr߆°dONLNdP—û)a1ent printer and then set the printer to the desirÜİdONLNdÅûØ)Õed r∞‡°dONLNdÖØ⁄)
  2425. esolution.
  2426. wl®¯4wl®¯
  2427. wl®´4vkwlò(ã?ã?wl´Ÿ€ˇ¯€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸€ˇ¸ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ'Û˛Ç<`¿`Hf ˛á˛;00¸0ˇ$˛
  2428. $1ÄêàD¸Ç˛2 ˚ˇ&˝!"2ÅÑH˛˛@¸ ˇ)%√≠A$RÇÑi≈¢ÀOã@◊Ö¶4qZ<Máhߡ)%Fh¶h    A8TÇÑíZ√Qô5Å"ö⁄I¶öåi¶ jH≥Iˇ)%IDpflàB Y/ƒ!Éa9%"íâ'Iƒt§Dˇ)%    2XÄ$D@ëA!<°B&BuØ    &ú»íÑ—EÚˇ)%sËpx8‡◊Å~◊B::©$i«Ò»sB‹ˇ˛à˝!˝ı ˆ˛à˝^˝ı ˆ˛p˜ ı¿ˆŸ¿ 8ÉÄ` ÓÄå˝    D@0ÓîÑ@FPÓ<s(ÇîiáÓq÷—≤ƒ¥~ÍQØ8¥Úñ”B§íL§äZSJá JíE$”XÚ(EÇ…    E    ¢ÉîK$JDìêÚ-)|â<”i§,ùH!6í$ÎNd ÚIŒ≥Ü∏”HÁ$@·˜dú!‰ö„R4„†Ú ı@Ñ˘Ò ıx˘Ò͇ÒŸ@ Ë¸Ê¿`¸Ê@@˛ÄÊ
  2429. GûA¥œ5≈†    „ÁBIFÑ[Dîö¿§ÄË
  2430. ‰QáRH®úÄHÁ$í»h§…K!iÄË ˚,áá$ñ}:F Ë ˝  ˝‚ p˝8‚Ÿ‡˛¿DÊê˛ÃÊ˛à ÄÍ#x8sû¸pâ£˝Œ–΃ê(E§Jiîàà§¶$ë`Îê$Ö(Tâ)    B$D°@Π   ‡&à»ñæm    öYHO"ÄΆcq«$[»‚ÓH5ÄÎ ¸ ˛‰¸ ‡¸¿‡Ÿ “¸ „ ∂¸    „
  2431.     $@„
  2432.     $h˚M„¥!„
  2433.     $)1íDX!„
  2434.     HPë"HP"„
  2435.     lñb'à†$„
  2436.     H˚¢á xò„ŸŸŸŸò(ã?ã?wl´Ÿ€ˇ¯€ € € € € € € € € € € "˛
  2437. ħH¿˜
  2438. ¸@§H¿˛ "˛
  2439. Ä¥ ˜
  2440. $@¥ ˛ "˛
  2441. Ê    Δl∑_1&3g˜
  2442. 'Zqÿ∑_a&fn˛ "˛
  2443. üo¯∂O°œL…˜
  2444. $ºU|∂O¡œôR˛ "˛
  2445. ò    ≠àJL!(D…˜
  2446. $†Uj`JLA(âR˛ "˛
  2447. óÊxJO°';G˜
  2448. $úU9‹JO¡'vN˛
  2449. Â@¯ Êį € € € ?Ùˇ˛˚?Ùˇ˛  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  `˙˚ Ù  Äê ˙˚ Ù  y;˙˚ Ù  e    OÄ˙˚ Ù  §ôL˙˚ Ù  8f;Ä˙˚ Ù   ˆ˚ Ù   ˆ˚ Ù   ˆ˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù   Ä0` ˛˚ Ù   Hê ˛˚ Ù   lÿÅúƒë„/≠˛˚ Ù   …0Çe‰ê∞È˛˚ Ù   I0Je뉴i˛˚ Ù   »–1ú‰`%—˛˚ Ù  ¸˛˛˚ Ù  ¸˛"˛˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  ˛˘˚ Ù  Ä˘˚ Ù  ôô€˘˚ Ù  ?˝W§˘˚ Ù  £aT$˘˚ Ù  ùù#ú˘˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  ˛Ä¸˚ Ù 
  2450.  Äĸ˚ Ù 
  2451.  ªéƒæ1‡Ä¸˚ Ù 
  2452.  S‰©xĸ˚ Ù 
  2453.  ∂S©A‡Ä¸˚ Ù 
  2454.  ûN‰N8ĸ˚ Ù  H˘˚ Ù  à˘˚ Ù  ˝˘˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù      é˚˚ Ù              ˚˚ Ù       1öüg    sú¿˛˚ Ù   {Êïîée‡˛˚ Ù      Cfïîâje˝˚ Ù   â9öwdâ:\‡˛˚ Ù  ˘˝˚ Ù  ˘8˝˚ Ù  Ù˚ Ù  ¿˛Gc˛˚ Ù  ˛&˝»îÄ˚ Ù  
  2455. Å£®xNîÄ˚ Ù  
  2456. ôAP–AîÄ˚ Ù  
  2457. ô"ASPxIîÄ˚ Ù   
  2458. ô=âQËFc˛˚ Ù  ˝˘˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù      é˚˚ Ù              ˚˚ Ù       1öüg    sú¿˛˚ Ù   {Êïîée‡˛˚ Ù      Cfïîâje˝˚ Ù       9öwdâ:\‡˛˚ Ù  ˘˝˚ Ù  ˘8˝˚ Ù  Ù˚ Ù  ¿˛Gc˛˚ Ù  ˛&˝»îÄ˚ Ù  
  2459. Å£®xNîÄ˚ Ù  
  2460. ôAP–AîÄ˚ Ù  
  2461. ô"ASPxIîÄ˚ Ù   
  2462. ô=âQËFc˛˚ Ù  ˝˘˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚?Ûˇ ?Ûˇ˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  0É˚ Ù  ÄÄHÉ˚ Ù  ôôó7ôô∏Å•›‡É˚ Ù  ?ÂìLá>eHÇe(É˚ Ù  £eìLÑ¢%HJe)‡É˚ Ù  ùôs4ÑùŸ81ù,É˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù ?Ûˇ˚?Ûˇ  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù   R˛˚ Ù   ÄÄV˛˚ Ù  ôôó7ôô∏Ú ˚ Ù   ?ÂìLá>eHb˛˚ Ù   £eìLÑ¢%HÚ˛˚ Ù  ùôs4ÑùŸ8¢ ˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù 
  2463.  ÄÃÄ Ã¸˚ Ù 
  2464.  %22¸˚ Ù 
  2465.  22¸˚ Ù 
  2466.  
  2467. 22¸˚ Ù 
  2468.  %22¸˚ Ù 
  2469.  ÄÃB ø˚ Ù  ˝@˘˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚ Ù  Ù˚?Ûˇ  Ù˚ Ù ?Ûˇ˚ Ù Ûˇ˚ Ù ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ Î?Ûˇ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ Î?Ûˇ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ ΠÙ Î?Ûˇ ÎÛˇ € € € € € € € € € € € € €ˇ¸€ˇ¸ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ'Û˛Ç<`¿`Hf ˛á˛;00¸0ˇ$˛
  2470. $1ÄêàD¸Ç˛2 ˚ˇ&˝!"2ÅÑH˛˛@¸ ˇ)%√≠A$RÇÑi≈¢ÀOã@◊Ö¶4qZ<Máhߡ)%Fh¶h    A8TÇÑíZ√Qô5Å"ö⁄I¶öåi¶ jH≥Iˇ)%IDpflàB Y/ƒ!Éa9%"íâ'Iƒt§Dˇ)%    2XÄ$D@ëA!<°B&BuØ    &ú»íÑ—EÚˇ)%sËpx8‡◊Å~◊B::©$i«Ò»sB‹ˇ˛à˝!˝ı ˆ˛à˝^˝ı ˆ˛p˜ ı¿ˆŸ¿ 8ÉÄ` ÓÄå˝    D@0ÓîÑ@FPÓ<s(ÇîiáÓq÷—≤ƒ¥~ÍQØ8¥Úñ”B§íL§äZSJá JíE$”XÚ(EÇ…    E    ¢ÉîK$JDìêÚ-)|â<”i§,ùH!6í$ÎNd ÚIŒ≥Ü∏”HÁ$@·˜dú!‰ö„R4„†Ú ı@Ñ˘Ò ıx˘Ò͇ÒŸ@ Ë¸Ê¿`¸Ê@@˛ÄÊ
  2471. GûA¥œ5≈†    „ÁBIFÑ[Dîö¿§ÄË
  2472. ‰QáRH®úÄHÁ$í»h§…K!iÄË ˚,áá$ñ}:F Ë ˝  ˝‚ p˝8‚Ÿ‡˛¿DÊê˛ÃÊ˛à ÄÍ#x8sû¸pâ£˝Œ–΃ê(E§Jiîàà§¶$ë`Îê$Ö(Tâ)    B$D°@Π   ‡&à»ñæm    öYHO"ÄΆcq«$[»‚ÓH5ÄÎ ¸ ˛‰¸ ‡¸¿‡Ÿ “¸ „ ∂¸    „
  2473.     $@„
  2474.     $h˚M„¥!„
  2475.     $)1íDX!„
  2476.     HPë"HP"„
  2477.     lñb'à†$„
  2478.     H˚¢á xò„ŸŸŸŸˇ    Ë@ˇ ˇˇˇˇ@
  2479. ˇ·ˇ‚7^
  2480. 4H\, Palatino
  2481. .+ä"CHAPTER €`)\1,     Helvetica
  2482.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2483. ~¿(‡1
  2484. ‡)-a¿)19
  2485. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2486. gHj4gHj"gHa
  2487. ˇ·ˇ‚7^
  2488.     °dONLNdˇˇ(dä Listing 1-4°dONLNd\ŒgŒ)D:Using the GetRslDataOp and SetRslOp opcodes with PrGeneral,
  2489. Courier
  2490. .°dONLNd;sH∞(|H<FUNCTION DoSetMaxResolution (thePrRecHdl: THPrint): Integer;°dONLNdyèHõZ*VAR°dONLNdùf©ê+maxDPI:°dONLNdäùÆ©fi)HInteger;°dONLNdï´f∑ú(¥f    resIndex:°dONLNd¢´Æ∑fi)HInteger;°dONLNd≠πf≈¢(¬f
  2491. getResRec:°dONLNdªπÆ≈)H TGetRslBlk;°dONLNd…«f”¢(–f
  2492. setResRec:°dONLNd◊«Æ”)H TSetRslBlk;°dONLNd‰„HÔf(ÏHBEGIN°dONLNdÏÒf˝Æ+ maxDPI := 0;°dONLNd˚ˇf 2*"getResRec.iOpCode := getRslDataOp;°dONLNd 
  2493. fÍ*PrGeneral(@getResRec);°dONLNd<)f5Ï*A{At this point, we have an array of possible resolutions in the }°dONLNdÄ7fCÚ*B{ getResRec variable. After checking for errors, we loop through }°dONLNd≈EfQ¯*C{ each resolution range record looking for the highest resolution }°dONLNd Sf_¬*:{ available where x and y are equal.  This loop makes no }°dONLNdHafmº*9{ assumptions about the order of the resolution records.}°dONLNdá}fâ∂*8IF (getResRec.iError = noErr) AND (PrError = noErr) THEN°dONLNd¬ãfóÑ*BEGIN°dONLNdÀôx•å+.FOR resIndex := 1 TO (getResRec.iRslRecCnt) DO°dONLNd˝ßx≥ñ*BEGIN°dONLNdµä¡z+(IF (getResRec.rgRslRec[resIndex].iXrsl =°dONLNd4√äœå*+    getResRec.rgRslRec[resIndex].iYrsl) AND°dONLNde—ú›»+2(getResRec.rgRslRec[resIndex].iXrsl > maxDPI) THEN°dONLNdùflúΙ*-maxDPI := getResRec.rgRslRec[resIndex].iYrsl;°dONLNdŒÌx˘ê(ˆxEND;°dONLNd⁄    xÜ*-{We now have the desired resolution, set it.}°dONLNd%x1Í*IF maxDPI <> 0 THEN°dONLNd&3x?ñ*BEGIN°dONLNd0AäM+WITH setResRec DO°dONLNdFOä[®*BEGIN°dONLNdQ]úi+iOpCode := setRslOp;°dONLNdkkúw *hPrint := thePrRecHdl;ˇ@ˇ ˇˇˇˇ@
  2494. ˇ·ˇ‚7^
  2495. 4*\˜, Palatino
  2496. .+l"CHAPTER €`)\1,     Helvetica
  2497.     (@lThe Printing Manager4⁄*˙¯
  2498. (‡*1 )-c)20
  2499.     )9Using the Printing Manager
  2500. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  2501. Courier
  2502. .°dONLNd\~hfi(e~iXRsl := maxDPI;°dONLNdj~vfi*iYRsl := maxDPI;°dONLNd+xlÑÑ(ÅlEND;°dONLNd4Ülí*PrGeneral(@setResRec);°dONLNdNîZ†r(ùZEND;°dONLNdZ∞Zº§*7IF (setResRec.iError = noErr) AND (PrError = noErr) AND°dONLNdñæl å+0(maxDPI <> 0) THEN DoSetMaxResolution := maxDPI;°dONLNd…ÃHÿZ(’HEND°dONLNdœ⁄Hʈ*ELSE DoSetMaxResolution := 0;°dONLNdÌË*ÙB(Ò*END;.°dONLNdÚl r+BY@İdONLNdÛr ï)ou can r√¿°dONLNd˚ï ·)#eset the original rzİdONLNd‚ ƒ)M5esolutions used by the printer driver by calling the .°dONLNdC l¢(l    PrGeneral°dONLNdL ¢Æ)6 prR`°dONLNdO ÆÀ) ocedur$¿°dONLNdU À˝) e with the $¿°dONLNd` ˝-)2SetRslOp$¿°dONLNdh -ë)0 opcode a second time. ˜ °dONLNd êó)cY  °dONLNdÄ óÌ)ou should save the ˇˇ˜|°dONLNdìl$÷(!lvalues contained in the ˇˇÊt]°dONLNd´◊$ı)kiVResˇˇ˜|]°dONLNd∞ı$    ) and ˇˇÊtL˰dONLNdµ
  2503. $()iHResˇˇ˜|L˰dONLNd∫($0) fiDd°dONLNdΩ1$¿)    !elds of the printer information rÏ0°dONLNdfi¿$“)èecoræê°dONLNd‚“$)d beforàl°dONLNdÈÒ$˜)e ˇˇ√t°dONLNdÎ$l0®(-l making the fi˰dONLNd¯$©0’)= rst call to ˇˇJ\QD°dONLNd$’0 ),    PrGeneralˇˇ√tQD°dONLNd
  2504. $ 0)6. Á°dONLNd$0)Y¸°dONLNd$0J)
  2505. ou can also r‘°dONLNd$K0õ)6eset the original r5ê°dONLNd0$õ0¯)Pesolutions by calling °dONLNdF0l<~(9lthe °dONLNdJ0~<Δ) PrintDefault°dONLNdV0Δ<“)H prR`°dONLNdY0“<Ô) ocedur$¿°dONLNd_0Ô<>)e with the print r˜ °dONLNdq0=<O)Necor…İdONLNdu0O<¡)d, which sets all of the fi…İdONLNdê0¡<Û)r elds of the .°dONLNdú<lHà(Elprint rµ‡°dONLNd£<àHö)ecor*@°dONLNdß<õH.)#d to the default values of the curr8İdONLNd <.Hc)ì
  2506. ent printer rà°dONLNd◊<cH{)5esour–@°dONLNd‹<{Hå)ce fiñ‡°dONLNd·<çH¬) le. However’İdONLNdÏ<¬HÙ)5
  2507. , if you use .°dONLNd˘HlT¥(Ql PrintDefault°dONLNdH¥T?)H" you lose all of the selections frR`°dONLNd'H?TÚ)ã)om the last time the user used the style .°dONLNdPTl`¨(]ldialog box.  (Y´@°dONLNd_T´`;)?!ou may want to set the original rö¿°dONLNdÄT;`“)ê"esolution because that may be the °dONLNd¢`llä(ilprinterÍİdONLNd©`ãl¨)    ’s best rÑ`°dONLNd≤`≠lA)"#esolution, though not its highest.)ˇˇ›‹.°dONLNd÷rl~K({l4If, based on the information you get with a call to ˇˇôît°dONLNd
  2508. rL~Ç)‡    PrGeneralˇˇ›‹t°dONLNdrÇ~Æ)6  using the ˇˇôdONLNdrÆ~ˆ), GetRslDataOpˇˇ›‹¢°dONLNd*rˆ~˜)H °dONLNd+~lä(ál"opcode, you decide to change the rR`°dONLNdM~äp)ôesolution with a call to R`°dONLNdf~pä¶)k    PrGeneralR`°dONLNdo~¶ä”)6  using the °dONLNdzälñú(ìlSetRslOp°dONLNdÇäúñÂ)0G opcode, the Printing Manager may need to change the appearance of the .°dONLNd…ñl¢Á(ülVstyle and job dialog boxes, disabling some items. (The appearance of the dialog boxes °dONLNd¢lÆ¿* and which items ar    ‡°dONLNd1¢¡Æ`)U&e disabled is up to the printer driverˆ‡°dONLNdW¢_Æ|)û.) TherÀİdONLNd^¢|Æç)efor#İdONLNdb¢éÆÃ)e, you should °dONLNdpÆl∫“(∑ldetermine and set the r쇰dONLNdáÆ“∫˝)f
  2509. esolution Ò °dONLNdëÆ˝∫)+beforc@°dONLNdñÆ∫)eF‡°dONLNdóÆ∫5) you pr¿°dONLNdûÆ5∫Ù) +esent the Printing Manager dialog boxes to °dONLNd…∫lΔè(√lthe user `°dONLNd—∫èΔô)#.   
  2510. Î*Ò¯4Ï*Ò¯ Ïlϯ
  2511. ˇ·ˇ‚7^
  2512. ˇˇ◊ˇ◊°dONLNd÷⁄lÎ=(ÁlDetermining Page Orientationˇˇˇˇˇˇ®(Á1
  2513. °dONLNdÛÒl˝Ë(˙lWAt times it can be useful for your application to determine which page orientation the °dONLNdJ˝l    ò* Guser selected in the style dialog box. For instance, if an image only fiȰdONLNdí˝ò    Í(òts on a page if it is °dONLNd®    l‚(lVprinted in landscape orientation and the user has not selected landscape orientation, °dONLNd˛l!Õ* your application can rª‡°dONLNdÕ!î)a/emind the user to select this orientation beforh °dONLNdCï!≈)» e printing. °dONLNdO!l-$(*l*Otherwise, the user gets a clipped image. .°dONLNdz3l?Æ*If you call the °dONLNdä3Æ?‰)B    PrGeneral°dONLNdì3‰?)6 prR`°dONLNdñ3?
  2514. ) ocedur$¿°dONLNdú3
  2515. ??) e with the $¿°dONLNdß3??u)2    GetRotnOp$¿°dONLNd∞3u?‘)6 opcode, the Printing .°dONLNdΔ?lKö(Hl    Manager rW°dONLNdœ?öK).eturns a handle to the curr‡°dONLNdÍ?K;)u ent print r≥ °dONLNdı?;KM),ecor'İdONLNd˘?NKÁ)#d and a Boolean variable that says °dONLNdKlWˆ(TlYwhether or not the user has selected landscape orientation. Because the user should have °dONLNduWlcw* alr-`°dONLNdxWxcÏ) Ueady selected the type of orientation when you check this value, you should not call .°dONLNdÕclo¢(ll    PrGeneral°dONLNd÷c¢oœ)6
  2516.  with the °dONLNd‡cœo)-    GetRotnOp°dONLNdÈcou)6 opcode until after you prR`°dONLNd    cuoı)pesent the style dialog box to .°dONLNd    !ol{è(xlthe user `°dONLNd    )oè{î)#. °dONLNd    ,Ålçö(äl Listing 1-5 @°dONLNd    7Åõçœ)/F illustrates how to determine whether the user has selected landscape °dONLNd    }çlô—(ñlorientation for the currg‡°dONLNd    ïç—ô)e
  2517. ent document.ˇz@ˇ ˇˇˇˇ@
  2518. ˇ·ˇ‚7^
  2519. 4H\, Palatino
  2520. .+ä"CHAPTER €`)\1,     Helvetica
  2521.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2522. ~¿(‡1
  2523. ‡)-a¿)21
  2524. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2525.     °dONLNdˇˇ(dä Listing 1-5°dONLNd\Œg    )DJUsing the GetRotnOp opcode with the PrGeneral procedure to determine page 
  2526. pHs4pHs"pHa
  2527. ˇ·ˇ‚7^°dONLNdJeŒp¯*     orientation,
  2528. Courier
  2529. .°dONLNdV|äà˛(Öä>FUNCTION DoIsLandscapeModeSet (thePrRecHdl: THPrint): Boolean;°dONLNdñòä§ú*VAR°dONLNdû¶ú≤ÿ+
  2530. GetRotRec:°dONLNd©¶ÿ≤ )< TGetRotnBlk;°dONLNd∑¬äŒ®(ÀäBEGIN°dONLNd¡–ú‹V+GetRotRec.iOpCode := getRotnOp;°dONLNdÂfiúÍ\* GetRotRec.hPrint := thePrRecHdl;°dONLNd
  2531. Ïú¯ *PrGeneral(@getRotRec);°dONLNd*úÊ*7IF (GetRotRec.iError = noErr) AND (PrError = noErr) AND°dONLNdgÆ"D+GetRotRec.fLandscape THEN°dONLNdÜ$Æ0Ã*BEGIN°dONLNdí2¿>n+DoIsLandscapeModeSet := TRUE;°dONLNdµ@ÆL¿(IÆEND°dONLNdΩNúZn(Wú#ELSE DoIsLandscapeModeSet := FALSE;°dONLNd·\äh¢(eäEND;
  2532. êHñ4êHï êäê
  2533. ˇ·ˇ‚7^
  2534. ˇˇ◊.ˇ◊°dONLNdÊ~äèk*&Choosing Draft-Quality Printingˇˇˇˇˇˇ®(ã1
  2535. °dONLNdïä°®(ûäDIf your application needs to print only text or bitmaps, it can incrå °dONLNdJï®° (û®ease performance and °dONLNd_°ä≠˝(™äTsave disk space by choosing draft-quality printing. The Printing Manager prints the °dONLNd≥≠äπÒ* document immediately‡°dONLNd«≠π∏)f0, rather than spooling it to disk as with deferrÄİdONLNd˜≠∏π)»ed printing. On the °dONLNd πä≈Ø(¬äImageWM‡°dONLNdπØ≈„)%
  2536. riter printeró@°dONLNdπ‚≈/)3, draft printing pr<¿°dONLNd1π0≈˘)N,oduces quick, low-quality drafts. The LaserWî@°dONLNd]π¯≈
  2537. )»riter °dONLNdc≈ä—b(Œä1printer does not print documents in draft-quality °dONLNdî≈b—i)ÿ.  .°dONLNdò◊ä„û(‡äIn orR`°dONLNdù◊û„«)
  2538. der to for$¿°dONLNdß◊«„Ö)),ce draft-quality printing, you can call the $¿°dONLNd”◊Ö„ª)æ    PrGeneral$¿°dONLNd‹◊ª„«)6 pr˜ °dONLNdfl◊Δ„„) ocedur…İdONLNdÂ◊„„) e with the °dONLNd„äÔÃ(Ïä DraftBitsOp°dONLNd˚„ÃÔ)B
  2539.  opcode. The °dONLNd„ÔH): DraftBitsOp°dONLNd„HÔì)B opcode has no efR`°dONLNd$„ìÔ
  2540. )Kfect if the printer does not .°dONLNdAÔä˚Y(¯ä/support draft-quality printing (like the LaserW°dONLNdpÔY˚)œ)riter printer) or does not support deferr+@°dONLNdôÔ˚)Æed °dONLNdú˚ä∞(ä    printing..°dONLNd¶
  2541. ä◊*If you want to forR`°dONLNd∏
  2542. ◊ì)M+ce draft-quality printing, you should call R`°dONLNd„
  2543. ì…)º    PrGeneralR`°dONLNdÏ
  2544. …ˆ)6
  2545.  with the °dONLNdˆä%Ã("ä DraftBitsOp°dONLNdÃ%)B
  2546.  opcode beforR`°dONLNd%):e pr$¿°dONLNd%Û)3esenting the style and job dialog boxes to the userg`°dONLNdEÚ%˜)€, .°dONLNdG%ä1˛(.äparticularly when the currπ °dONLNda%˛1l)tent printer is an ImageW@°dONLNdy%l1†)n
  2547. riter printerQ†°dONLNdÜ%ü1‰)3. The use of the .°dONLNdó1ä=Ã(:ä DraftBitsOp°dONLNd¢1Ã=)BI opcode disables the landscape icon in the style dialog box and the Best .°dONLNdÎ=äI=(Fä*and Faster options in the job dialog box. °dONLNdOä[∏* Listing 1-6 @°dONLNd!Oπ[)/ illustrates how to for†°dONLNd8O[Ñ)^ce draft-quality printing.ˇ@ˇ ˇˇˇˇ@
  2548. ˇ·ˇ‚7^
  2549. 4*\˜, Palatino
  2550. .+l"CHAPTER €`)\1,     Helvetica
  2551.     (@lThe Printing Manager4⁄*˙¯
  2552. (‡*1 )-c)22
  2553.     )9Using the Printing Manager
  2554. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2555.     °dONLNdˇˇ(dl Listing 1-6°dONLNd\∞gÛ)DQUsing the DraftBitsOp opcode with the PrGeneral procedure to force draft quality 
  2556. p*s¯4p*s¯"p*a
  2557. ˇ·ˇ‚7^°dONLNdQe∞pÕ*    printing,
  2558. Courier
  2559. .°dONLNdZ|là§(Öl4FUNCTION DoDraftBits(thePrRecHdl: THPrint): Boolean;°dONLNdêòl§~*VAR°dONLNdò¶~≤Ã+
  2560. draftBitsBlk:°dONLNd¶¶Ã≤)N TDftBitsBlk;°dONLNd¥¬lŒä(ÀlBEGIN°dONLNdæ–~‹V+$draftBitsBlk.iOpCode := draftBitsOp;°dONLNdÁfi~ÍP*#draftBitsBlk.hPrint := thePrRecHdl;°dONLNdÏ~¯*PrGeneral(@draftBitsBlk);°dONLNd.~‡*;IF (draftBitsBlk.iError = noErr) AND (PrError = noErr) THEN°dONLNdoê"+DoDraftBits := TRUE°dONLNdä "∞)ê{ draft printing is on }°dONLNdß$~0(-~ELSE DoDraftBits := FALSE;°dONLNd $ 0»)¢{ draft printing is NOT on }°dONLNdÁ2l>Ñ(;lEND;°dONLNdÏJlVs*Yï°dONLNdÌJrV£) ou can call ï°dONLNd˘J£VŸ)1    PrGeneralï°dONLNdJŸV)6
  2561.  with the ï°dONLNd JVT)-
  2562. NoDraftBitsOpï°dONLNdJTVü)N opcode to turn ofg`°dONLNd+JüV¿)Kf the ef9¿°dONLNd3J¿VÙ)!
  2563. fects of the °dONLNd@VlbÆ(_l DraftBitsOp°dONLNdKVÆb
  2564. )B opcode, as shown in °dONLNd`V
  2565. b:)\ Listing 1-7°dONLNdkV:bo)0. If you call °dONLNdyVob•)5    PrGeneral°dONLNdÇV•b¿)6 with °dONLNdàbln∫(kl
  2566. NoDraftBitsOp°dONLNdïb∫nÁ)N
  2567.  without fPİdONLNdübÁn>)-irst calling it with PİdONLNd¥b>nÄ)W DraftBitsOpPİdONLNdøbÄn°)B, the pr"‡°dONLNd«b°næ)!ocedurı@°dONLNdÕbΩn⁄)e does °dONLNd‘nlzî(wl    nothing. !†°dONLNd›nîzÕ)( As with the !†°dONLNdÈnÕz)9 DraftBitsOp!†°dONLNdÙnz|)B opcode, you should call !†°dONLNd
  2568. n|z≤)m    PrGeneral!†°dONLNdn≤zfl)6
  2569.  with the °dONLNd zlÜ∫(Él
  2570. NoDraftBitsOp°dONLNd-z∫ÜÙ)N
  2571.  opcode beforR`°dONLNd:zÙÜ):e you pr$¿°dONLNdBzÜÂ)#0esent the style and job dialog boxes to the userg`°dONLNdrz‰ÜÈ)Õ. 
  2572.     .°dONLNdˇˇ(¶l Listing 1-7°dONLNduû∞©–)DFUsing the NoDraftBitsOp opcode with the PrGeneral procedure to turn ofÂ@°dONLNdªû–©È(¶–f draft 
  2573. ≤*µ¯4≤*µ¯"≤*a
  2574. ˇ·ˇ‚7^°dONLNd√ß∞≤Í(Ø∞quality printing
  2575. .°dONLNd‘ølÀ∞(»l6FUNCTION DoNoDraftBits(thePrRecHdl: THPrint): Boolean;°dONLNd €lÁ~*VAR°dONLNdÈ~ıÃ+
  2576. draftBitsBlk:°dONLNd"ÈÃı)N TDftBitsBlk;°dONLNd0lä(lBEGIN°dONLNd:~b+&draftBitsBlk.iOpCode := nodraftBitsOp;°dONLNde!~-P*#draftBitsBlk.hPrint := thePrRecHdl;°dONLNdç/~;*PrGeneral(@draftBitsBlk);°dONLNd≠K~W‡*;IF (draftBitsBlk.iError = noErr) AND (PrError = noErr) THEN°dONLNdÓYêe+DoNoDraftBits := TRUE°dONLNdYe∂)~{ draft printing is NOT on }°dONLNd'g~s&(p~ELSE DoNoDraftBits := FALSE;°dONLNdEg&s§)®{ draft print is on }°dONLNd[ulÅÑ(~lEND;ˇF@ˇ ˇˇˇˇ@
  2577. ˇ·ˇ‚7^
  2578. 4H\, Palatino
  2579. .+ä"CHAPTER €`)\1,     Helvetica
  2580.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2581. ~¿(‡1
  2582. ‡)-a¿)23
  2583. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2584. mHs4nHs nän
  2585. ˇ·ˇ‚7^
  2586. ˇˇ◊ˇ◊°dONLNd\ämÄ(iä$Altering the Style or Job Dialog Boxˇˇˇˇˇˇ®(i1
  2587. °dONLNd%säæ(|ä The standarÌ@°dONLNd0sæÑ)4/d style and job dialog boxes that the printer rM†°dONLNd_sÖù)«esourdONLNddsùÆ)ce fi\İdONLNdisØ√)le prU†°dONLNdns√)ovides for the °dONLNd}äã¨(àäLaserW◊†°dONLNdÉ´ãÍ)!riter printer ar#`°dONLNdìÎã )@ e shown on ` °dONLNdû ã@)5page 1-釰dONLNd•@ãE) 7釰dONLNd¶Eã)0. Each dialog box has options that the user can .°dONLNd÷ãäó!(îä#set. If you want to use the standarR`°dONLNd˘ã!óµ)ó$d style or job dialog box, call the ,
  2588. CourierR`°dONLNdãµó˜)î PrStlDialogR`°dONLNd(ã˜ó˘)B °dONLNd)ó䣥(†ä
  2589. function (°dONLNd3ó¥£’)*page 1-°dONLNd:ó’£fl)!43°dONLNd<ófl£)
  2590. ) or °dONLNdAó£2) PrJobDialog°dONLNdLó2£8)B (°dONLNdNó8£Y)page 1-°dONLNdUóY£c)!43°dONLNdWóc£î)
  2591.  
  2592. ) function . .°dONLNde©äµê(≤äY@İdONLNdf©êµ)Vou may wish to add some additional options to these dialog boxes so that the user can °dONLNdºµä¡˙(æäcustomize the printing pr–İdONLNd’µ˙¡J)pocess even furthere°dONLNdÁµJ¡x)P    . HoweverÒ†°dONLNdµw¡ç)-, therî°dONLNdˆµé¡û)e ar¢†°dONLNd˙µû¡
  2593. )e strict guidelines about °dONLNd¡äÕ( ä#altering style or job dialog boxes:,
  2594.  
  2595. Zapf Dingbats
  2596. °dONLNd8÷ä›è*n
  2597. °dONLNd:”ñfl3) $If you want to add items to the curra‡°dONLNd^”3fl)ù0ent dialog box, add them only at the end of the °dONLNdéflñÎ(Ëñlist. Do not delete items frM¿°dONLNd™flÎz)rom the existing item list, rı°dONLNdΔflzÎ)r earrange them, or add new items °dONLNdÊÎñ˜(Ùñin the middle of the list. 
  2598. °dONLNdäè(än
  2599. °dONLNd˝ñ    y) 2The additional options should be below the standarQ@°dONLNd6˝z     )‰"d ones in the dialog box, leaving °dONLNdX    ñ«(ñ the standar‡°dONLNdc    »)2d ones unchanged. 
  2600. °dONLNdvä%è($än
  2601. °dONLNdxñ') Don’t count on an item r¥°dONLNdê'G)letaining its currY`°dONLNd°H'©)Fent position on the scr€‡°dONLNd∏©')aeen or in the dialog °dONLNdÕ'ñ3Ó(0ñitem list in the code.
  2602. °dONLNd‰<äCè(Bän
  2603. °dONLNdÊ9ñE’)
  2604. Don’t use mor™°dONLNdÛ9’EI)?e than half the smallest scr`¿°dONLNd9JEæ)ueen height for your items. M°dONLNd*9æEfl)tApple rİdONLNd19‡E)" eserves the °dONLNd=EñQD(Nñ(right to expand the items in the standar¬†°dONLNdeEDQó)Æd dialog boxes to fi¿Ä°dONLNdyEòQ˝)Tll the top half of the scrO@°dONLNdìE˛Q)feen.
  2605. °dONLNdòZäaè(`än
  2606. °dONLNdöWñc°) >If you want to add a lot of items to the dialog boxes, be awarß@°dONLNdÿW°c(`°e this may confuse users. °dONLNdÚcñoú(lñY@İdONLNdÛcúo)Sou should consider having your own separate dialog box in addition to the existing °dONLNdFoñ{#(xñPrinting Manager dialog boxes. 
  2607. °dONLNdfÑäãè(ään
  2608. °dONLNdhÅñçù) 8Dialog boxes may actually be color windows, which may afU°dONLNd†Åùç(äùfect your code somewhat.°dONLNdπìäü (úäVIf you want to modify either of the Printing Manager dialog boxes, you need to change °dONLNdüä´ˆ* the printing dialog box rs°dONLNd(üˆ´)lecorÁ`°dONLNd,ü´)d (◊°dONLNd/ü´4) page 1-¿°dONLNd6ü5´?)!39¿°dONLNd8ü?´`)
  2609.     ). This r∂ °dONLNdAü`´r)!ecor*İdONLNdEüs´)#d contains a pointer to the dialog °dONLNdh´ä∑»(¥ä box’s window8°dONLNdt´»∑R)>!, a pointer to the dialog event fiH`°dONLNdñ´R∑`)älterr°dONLNdö´`∑∑), and a pointer to pr °dONLNdØ´∏∑÷)Xocedur•`°dONLNdµ´÷∑)es for °dONLNdº∑ä√`(¿ä1evaluating dialog items, and a handle to the curr°dONLNdÌ∑a√ç)◊ ent print rñ@°dONLNd¯∑ç√ü),ecor
  2610. †°dONLNd¸∑†√´)d. °dONLNd…ä’ë(“äA∫†°dONLNd…ë’ì) :†°dONLNd…î’‘)dialog event fi6‡°dONLNd…’’‰)Alter¬@°dONLNd…‰’Ø). is a function that extends the Dialog Manager3¿°dONLNdC…±’)Õ’s event-handling °dONLNdU’ä·¬(fiä
  2611. functionality¿°dONLNdb’¬·)8M. When your application displays the style or job dialog box, you can use an °dONLNdØ·äÌ™(Íäevent fiZ°dONLNd∑·´Ì)!Llter to handle events that the Dialog Manager doesn’t handle—such as update °dONLNdÌ䢓(ˆäevents in backgrü °dONLNdÌ“˘Ú)H<ound applications or the Command-period key-down event. The n °dONLNdOÌÛ˘(ˆÛdialog ˇˇË›°dONLNdV˘ä°(ähookˇˇÌ~.’¿°dONLNdZ˘°ø) in the ˇˇ»zû:°dONLNdb˘¿ˆ)    pItemProcˇˇÌ~û:°dONLNdk˘ˆ˛)6 fiã∏°dONLNdn˘ˇä)    eld is analogous to the Standaré°dONLNdç˘ã)å!d File dialog hook: it tells you .°dONLNdÆä(äYwhich item of which dialog box the user has selected, and you can handle the item or the °dONLNd    ä* ]printer driver can handle the item if it’s one of the original items of the dialog box.      ˇÙ@ˇ ˇˇˇˇ@
  2612. ˇ·ˇ‚7^
  2613. 4*\˜, Palatino
  2614. .+l"CHAPTER €`)\1,     Helvetica
  2615.     (@lThe Printing Manager4⁄*˙¯
  2616. (‡*1 )-c)24
  2617.     )9Using the Printing Manager
  2618. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  2619. Courier
  2620. .°dONLNd\lhΔ(elTPrDlg = RECORD°dONLNdj~vñ+Dlg:°dONLNdjΔv)H
  2621. DialogRecord;°dONLNd-jv)N °dONLNd1jDvŒ)0{Ptr to the dialog box}°dONLNdMx~Ñ∫(Å~
  2622. pFltrProc:°dONLNd[xΔÑ8)HModalFilterProcPtr;°dONLNduxDÑ⁄)~{The dialog event filter}°dONLNdìÜ~í∫(è~
  2623. pItemProc:°dONLNd°ÜΔí)H
  2624. PItemProcPtr;°dONLNdµÜDíÊ)~{The item evaluating proc.}°dONLNd’î~†∫(ù~
  2625. hPrintUsr:°dONLNd„îΔ†ˆ)HTHPrint;°dONLNdÚîD†∞)~{The print record}°dONLNd    ¢~Æ¢(´~fDoIt:°dONLNd¢Δƈ)HBoolean;°dONLNd"¢DÆ∂)~{Reserved by Apple}°dONLNd:∞~º¢(π~fDone:°dONLNdD∞Δºˆ)HBoolean;°dONLNdS∞Dº∂)~{Reserved by Apple}°dONLNdkæ~ ®(«~lUser1:°dONLNdvæΔ ˆ)HLongInt;°dONLNdÖæD ∂)~{Reserved by Apple}°dONLNdùÃ~ÿ®(’~lUser2:°dONLNd®ÃΔÿˆ)HLongInt;°dONLNd∑ÃDÿ∂)~{Reserved by Apple}°dONLNdœ⁄~Ê®(„~lUser3:°dONLNd⁄⁄Δʈ)HLongInt;°dONLNdÈ⁄DÊ∂)~{Reserved by Apple}°dONLNdË~Ù®(Ò~lUser4:°dONLNd ËΔÙˆ)HLongInt;°dONLNdËDÙ∂)~{Reserved by Apple}°dONLNd3ˆ~ñ(ˇ~END;.°dONLNd8lP(l5If you want to customize a style or job dialog box, fiÛ °dONLNdnPÒ)‰)rst call the initialization function for ˇˇ≤⁄.°dONLNdól&˛(#l"a pointer to that dialog box. The ˇˇécˆ°dONLNdπˇ&5)ì    PrStlInitˇˇ≤⁄cˆ°dONLNd¬5&`)6  function (…™°dONLNdÕ`&Ä)+page 1-|ѰdONLNd‘Å&ã)!45|ѰdONLNd÷ã&î)
  2626. ) ræ°dONLNdŸï&¯)
  2627. eturns a handle to the °dONLNd&l2è(/lstandarR`°dONLNd˜&è2ˆ)#d style dialog box; the R`°dONLNd&ˆ2,)g    PrJobInitR`°dONLNd&,2X)6  function (R`°dONLNd#&X2y),page 1-R`°dONLNd*&y2É)!45R`°dONLNd,&É2ç)
  2628. ) r$¿°dONLNd/&ç2Ú)
  2629. eturns a handle to the ˇˇÒ¯°dONLNdF2l>è(;lstandarR`°dONLNdM2è>:)#(d job dialog box. Then you can call the ˇˇ’Ë‘°dONLNdu2:>p)´    PrDlgMainˇˇÒ¯‘°dONLNd~2p>õ)6  function (∏°dONLNdâ2ú>º),page 1-™°dONLNdê2Ω>«)!44™°dONLNdí2«>˜)
  2630. ) with the .°dONLNdù>lJÅ(Gladdr|İdONLNd°>ÅJ.))ess of your own initialization function. .°dONLNdÀPl\ä(YlThe prR`°dONLNd—Pä\®)ogram R`°dONLNd◊P®\)DoModifyDialogsR`°dONLNdÊP\-)Z , given in R`°dONLNdÒP-\])+ Listing 1-8R`°dONLNd¸P]\Ä)0, modifiR`°dONLNdPÄ\Û)#es the job dialog box. The ˇˇ¢∏°dONLNd\lhä(elPrintˇˇ‡Ë°dONLNd$\äh€) function calls the ˇˇ¢∏†°dONLNd8\‹h)R    PrJobInitˇˇ‡Ë†°dONLNdA\h])6 function and storx∏°dONLNdS\]h¯)K$es the handle to the job dialog box ˇˇçZ°dONLNdwhlty(qlit rfl∫°dONLNd{hyt€)
  2631. eturns in the variable ˇ˛®"°dONLNdíh‹t$)c PrtJobDialogˇˇçZ"°dONLNdûh$t<)H. The ˇ˛®/÷°dONLNd§h<tZ)PrintˇˇçZ/÷°dONLNd©hZt¿) function then calls the ˇ˛®Úò°dONLNd¬h¿tˆ)f    PrDlgMainˇˇçZÚò°dONLNdÀhˆt˜)6 °dONLNdÃtlÄ”(}lfunction with the addrR`°dONLNd‚t”Ä    )g
  2632. ess of the pr$¿°dONLNdÔt    Äô)6!ogram’s initialization function, $¿°dONLNdtôÄ·)ê MyJobDlgInit$¿°dONLNdt·ÄÊ)H. ˇˇΩ`°dONLNdÜlí(èlThe ˇˇ8 =`°dONLNd#ÜÄí») MyJobDlgInitˇˇΩ`=`°dONLNd/Ü»íˆ)H  function fi∏ °dONLNd;܈í'). lls in the fi@°dONLNdHÜ'í≥)1!elds of the printing dialog box r2‡°dONLNdiÜ¥íΔ)çecor@°dONLNdmÜΔí¯) d, appends .°dONLNdxílûI(õl2the customized dialog items onto the dialog box, rô‡°dONLNd™íIûÛ)›'eplaces the original item handler with .°dONLNd—ûl™Ó(ßlthe customized item handler¬†°dONLNdÏûÌ™    )Å, and rï°dONLNdÛû    ™V)eturns the modifiï°dONLNdûV™ø)Med job dialog box to the ï°dONLNdûø™›)iPrintï°dONLNd"û›™fl) °dONLNd#™l∂b(≥l7function. The customized dialog item handler is in the °dONLNdZ™b∂û)ˆ
  2633. MyJobItems°dONLNdd™û∂™)< prR`°dONLNdg™™∂«) ocedur$¿°dONLNdm™«∂Í)e. Note .°dONLNdu∂l¬k(øl:that your item handler must call the original item handlerË¿°dONLNdØ∂j¬)˛, so that the Printing Manager °dONLNdŒ¬lŒ*(Àl,can handle original items in the dialog box.°dONLNd˚‘l‡*"Please note that your dialog hook &@°dONLNd‘‡)ómust¥ °dONLNd!‘‡\) call the standarѰdONLNd2‘]‡Ò)F#d dialog hook to handle all of the °dONLNdU‡lÏç(Èlstandar±Ä°dONLNd\‡çÏÇ)!9d dialog’s original items. If you wish to have an event fiz °dONLNdñ‡ÉÏë)ˆlter£¿°dONLNdö‡ëÏÈ), handle it the same °dONLNdØÏl¯¯(ılway that you do a dialog hook. 
  2634. *¯4*¯
  2635. °dONLNdˇˇ*NOTE
  2636. ˇ·ˇ‚7^
  2637. °dONLNdœl§*
  2638. The code  in ¿†°dONLNd‹§“)8 Listing 1-8`‡°dONLNdÁ”{)/( works for the style dialog box if you rȇ°dONLNd{ô)®eplace °dONLNdl'›($lall of the functions specifi∞‡°dONLNd2›'ç)q)c to the job dialog box with those specifir@°dONLNd\é'î)±c °dONLNd^'l3”(0lfor the style dialog box.,
  2639.  
  2640. Zapf Dingbats
  2641. p¿°dONLNdˇˇ)ku
  2642. V*Y¯4V*Y¯"V*a
  2643. ˇ·ˇ‚7^
  2644.     °dONLNdˇˇ(Sl Listing 1-8°dONLNdåK∞V/)D Adding items to a job dialog box
  2645. °dONLNd≠]li!(fl(See the chapter “Dialog Manager” in the ÆÄ°dONLNd’]!if)µInside MacintoshêİdONLNdÂ]gil)F: êİdONLNdÒ]liü) Macintosh T°dONLNd¸]üi∏)3oolbox∫°dONLNd    ]∏i€) for morÑİdONLNd    
  2646. ]‹i„)$e °dONLNd     iluP(rl3information about dialog boxes, dialog items, and fi‡°dONLNd    @iQul)Âlter pr>°dONLNd    Giluä)ocedur’@°dONLNd    Miäu›)es. See the chapter °dONLNd    aulÅì(~l“Standar¥@°dONLNd    iuìÅı)'d File Package” in the r`°dONLNd    ÄuˆÅ;)cInside MacintoshT`°dONLNd    êu<ÅA)F: T`°dONLNd    úuAÅä)Operating SystemÓ‡°dONLNd    ¨uäÅ“)I volume for mor‚@°dONLNd    ªu“ÅŸ)He °dONLNd    ΩÅlçÒ(älinformation about the Standar†°dONLNd    ⁄ÅÚçG)Üd File dialog hook. ˇ.n@ˇ ˇˇˇˇ@
  2647. ˇ·ˇ‚7^
  2648. 4H\, Palatino
  2649. .+ä"CHAPTER €`)\1,     Helvetica
  2650.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2651. ~¿(‡1
  2652. ‡)-a¿)25
  2653. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2654. mHs4nHs nän
  2655. ˇ·ˇ‚7^
  2656. ˇˇ◊ˇ◊°dONLNd\ämô(iäW(°dONLNd\ôm)riting an Idle Prˇ °dONLNd\m5)locedur˛Ä°dONLNd\5m<)0eˇˇˇˇˇˇ®)Ÿ1
  2657. °dONLNdsäÚ(|äThe Printing Manager rm†°dONLNd0sÚ2)huns the idle pr]¿°dONLNd?s2P)@ocedurı°dONLNdEsP)*e while it sends a document to the printer‡°dONLNdos
  2658. )∏. °dONLNdqäãû(àä(See &‡°dONLNdvüã‘) “The Idle Pr›Ä°dONLNdÇ‘ãÚ)5ocedurt¿°dONLNdàÛã-)
  2659. e” on page 1-¥°dONLNdï-ã2):8¥°dONLNdñ2ãõ).) The Printing ManagerT@°dONLNd≠ùãÂ)k’s default idle pr¿‡°dONLNdøÂã)HocedurX °dONLNd≈ã )e °dONLNd«ãäó>(îä*allows the user to cancel printing. The pr`°dONLNdÒã?ó])µocedur߆°dONLNd˜ã]ó¬)e just polls the keyboar[@°dONLNdã√ó˘)f
  2660. d and sets a °dONLNdóä£Á(†äPrinting Manager err‘İdONLNd0óÁ£)]Aor code if the user types Command-period (to cancel the printing °dONLNdq£äØ
  2661. (¨äjob). If you use the default prÉ@°dONLNdê£
  2662. Ø()ÄocedurİdONLNdñ£)Ø)6e, you should display a dialog box during printing to °dONLNdÃØäª©(∏ä=inform the user that the Command-period command is available.°dONLNd
  2663. ¡äÕ7*'If you choose to write your own idle prÄ¿°dONLNd1¡7ÕU)≠ocedur°dONLNd7¡VÕˇ)(e instead of using the default Printing °dONLNd_ÕäŸæ(÷ä
  2664. Manager prY °dONLNdiÕæŸ‹)4ocedur`°dONLNdoÕ‹Ÿ˜)e, ther\`°dONLNdvÕ¯Ÿ)e ark°dONLNdzÕŸ¨)%e several guidelines you must follow:,
  2665.  
  2666. Zapf Dingbats
  2667. °dONLNd†‚äÈè(Ëän
  2668. .°dONLNd¢flñÎ ) If you designate an idle prR`°dONLNdΩfl Î))vocedur$¿°dONLNd√fl)Î})e, you must set the ,
  2669. Courier$¿°dONLNd◊fl}Î≥)T    PIdleProc$¿°dONLNd‡fl≥κ)6 fi$¿°dONLNd„flºÎ)    eld of the print .°dONLNdÙÎñ˜ô(ÙñrE°dONLNdıÎö˜¨)ecorπ`°dONLNd˘Î¨˜¥)d U °dONLNd˚ε˜«)    afterß¿°dONLNdΫ˜”) prÓ‡°dONLNdΔ˜§) 1esenting the dialog boxes, validating the print r«‡°dONLNd4Χ˜∂)—ecor<@°dONLNd8Î∑˜)d, and initializing °dONLNdL˜ñ¨(ñthe fiÍ °dONLNdR˜¨)elds in the printing rä¿°dONLNdh˜)[ecorˇ °dONLNdl˜])d, because the råİdONLNd|˜^)E&outines that perform these operations .°dONLNd¢ñö( ñrR`°dONLNd£ö¿)    eset the R`°dONLNd¨¿ˆ)&    PIdleProcR`°dONLNdµˆˇ)6 fiR`°dONLNd∏ˇ)    eld to R`°dONLNdø-)NILR`°dONLNd¬-2). 
  2670. .°dONLNd≈äè(än
  2671. ˇˇ¸Ç.°dONLNd«ñ!ù) Yï°dONLNd»ú!)ou must install your idle prUͰdONLNd‰!2)yocedur(J°dONLNdÍ2!r)e in the print rÏ≤°dONLNd˙r!Ñ)@ecorø°dONLNd˛Ñ!¢)d beforçÙ°dONLNd£!›)e calling the ˇˇıÜÉz°dONLNdfi!);    PrOpenDocˇˇ¸ÇÉz°dONLNd!)6 .°dONLNd!ñ-ü(*ñprG °dONLNd!†-æ)
  2672. ocedurfi`°dONLNd%!æ-µ):e. Otherwise, the printer driver does not give the idle pr‡¿°dONLNd_!µ-”)˜ocedurx°dONLNde!‘-) e any time. .°dONLNdq-ñ9ù(6ñYï°dONLNdr-ú9)ou install a pointer to your prg`°dONLNdë-9<)Éocedur9¿°dONLNdó-<9`)    e in the 9¿°dONLNd†-`9ñ)$    pIdleProc9¿°dONLNd©-ñ9ü)6 fi9¿°dONLNd¨-ü9)    eld of the printing job .°dONLNdƒ9ñE©(Bñsubr¿°dONLNd»9™Eº)ecorÖ °dONLNdÃ9ºE«)d (t¿°dONLNdœ9»EË) page 1-£Ä°dONLNd÷9ËEÚ) 31£Ä°dONLNdÿ9ÚE˙)
  2673. ). 
  2674. °dONLNd‹NäUè(Tän
  2675. °dONLNdfiKñW) Do not attempt any printing fr÷°dONLNd¸KWy)Üom within the idle prá°dONLNdKzWò)^ocedur@°dONLNdKôWˇ)e, because the Printing °dONLNd/Wñc…(`ñ Manager is 7`°dONLNd:W c◊)4not䆰dONLNd=W◊c›)
  2676.  rœ†°dONLNd?W›c)    eentrant.
  2677. °dONLNdIläsè(rän
  2678. .°dONLNdKiñuù) Yï°dONLNdLiúu”)
  2679. ou must call ï°dONLNdYi”u!)7
  2680. WaitNextEventï°dONLNdfi!uK)N
  2681.  to capturg`°dONLNdpiKu˘)*%e mouse clicks or the Command-period .°dONLNdïuñÅà(~ñ8sequence that signals the user wants to cancel printing.
  2682. °dONLNdŒääëè(êän
  2683. .°dONLNd–áñì) Don’t call the QuickDraw °dONLNdÈáìP)x OpenPicture°dONLNdÙáPìÉ)B
  2684.  function or °dONLNdáÉì≈)3 DrawPicture°dONLNd á≈ì—)B prR`°dONLNdá—ìÓ) ocedur$¿°dONLNdáÓì¯)e. 
  2685. .°dONLNdúä£è(¢än
  2686. .°dONLNdôñ•ù) Yï°dONLNdôú•)ou must save the printerR`°dONLNd4ô    •)m’s R`°dONLNd7ô•B)    grafPortR`°dONLNd?ôB•±)0 upon entry to the idle pr$¿°dONLNdYô±•Œ)oocedur˜ °dONLNd_ôÕ•Î)e and r…İdONLNdfôΕ)estorõ‡°dONLNdkô•)e it .°dONLNdp•ñ±o(Æñ1upon exit if you draw anything within the idle pr? °dONLNd°•p±é)⁄ocedur÷`°dONLNdß•é±)e. If you don’t, the printer .°dONLNdƒ±ñΩ˘(∫ñdriver draws into the °dONLNd⁄±˘Ω))cgrafPort°dONLNd‚±)ΩŒ)0' of your dialog box instead of its own °dONLNd    ±ŒΩ˛)•grafPort°dONLNd±˛Ω    )0. Tï°dONLNd±Ω)
  2687. o °dONLNdΩñ…fl(Δñsave the printer=`°dONLNd&Ω‡…È)J’s =`°dONLNd)ΩÈ…)    grafPort=`°dONLNd1Ω…D)0 , call the =`°dONLNd<ΩD…n)+GetPort=`°dONLNdCΩn…z)* pr¿°dONLNdFΩz…ó) ocedur‚ °dONLNdLΩñ…)e when entering the idle °dONLNde…ñ’†(“ñprR`°dONLNdg…†’Ω)
  2688. ocedur$¿°dONLNdm…Ω’‡)e. Befor˜ °dONLNdu…fl’5)"e you exit, call the ˜ °dONLNdä…5’_)VSetPort˜ °dONLNdë…_’k)* pr…İdONLNdî…k’à) ocedurõ‡°dONLNdö…à’)e to set the port back to the °dONLNd∏’ñ·’(fiñprinter driver=`°dONLNdΔ’÷·fl)@’s =`°dONLNd…’fl·)    grafPort=`°dONLNd—’·,)0. (The =`°dONLNdÿ’,·V)GetPort=`°dONLNdfl’V·k)* and =`°dONLNd‰’k·ï)SetPort=`°dONLNdÎ’ï·°)* pr¿°dONLNdÓ’°·æ) ocedur‚ °dONLNdÙ’Ω·“)es ar¥Ä°dONLNd˘’“·)e described in .°dONLNd·ñÌ
  2689. (Íñthe chapter “QuickDraw”.)
  2690. °dONLNd"ˆä˝è(¸än
  2691. °dONLNd$Ûñˇ”) If your idle pr.°dONLNd3Û‘ˇÚ)>ocedur≈@°dONLNd9ÛÚˇ3)e changes the rZ°dONLNdHÛ4ˇL)Besour¢@°dONLNdMÛLˇÒ)&ce chain, you should save the printer .°dONLNdsˇñ ≥(ñdriver=`°dONLNdyˇ¥ ¡)’s r¿°dONLNd}ˇ¡ ÿ)
  2692. esour‚ °dONLNdǡ◊ ?)ce chain by calling the ‚ °dONLNdöˇ? {)h
  2693. CurResFile‚ °dONLNd§ˇ{ )<# function and saving the ID of the .°dONLNd« ñ“(ñprinter driver√¿°dONLNd’ ”‡)=’s r
  2694. °dONLNdŸ ·˘)esourU@°dONLNdfi ˘
  2695. )ce fi‡°dONLNd„  ü)#le at the beginning of your idle prg°dONLNd     üΩ)îocedur˛@°dONLNd      Ω„)    e. (Any ràİdONLNd     ‰)'outine ˇˇ±:.°dONLNd    ñ#d( ñ.that changes the value of the global variable ˇˇÆ    –°dONLNd    Je#õ)œ    TopMapHdlˇˇ±:    –°dONLNd    Sõ#“)6, such as the ˇˇÆŒ∏°dONLNd    a“#)7 OpenResFileˇˇ±:Œ∏°dONLNd    l#)B °dONLNd    m#ñ/Ÿ(,ñfunction or the °dONLNd    }#Ÿ/)C
  2696. UseResFile°dONLNd    á#/!)< prR`°dONLNd    ä#!/>) ocedur$¿°dONLNd    ê#>/Ñ)e, changes the r˜ °dONLNd    †#É/ö)Eesour…İdONLNd    •#ö/)ce chain. Some printer .°dONLNd    º/ñ;(8ñdrivers assume the rW`°dONLNd    –/;)Zesourü†°dONLNd    ’/;·)0ce chain does not change, and you may get an err+İdONLNd
  2697. /‚;
  2698. )⁄
  2699. or if you °dONLNd
  2700. ;ñG.(Dñ#do change it.) When you exit for fre†°dONLNd
  2701. 2;.Gl)òom the idle prâ¿°dONLNd
  2702. @;lGä)>ocedur!°dONLNd
  2703. F;ãGò)e, r؆°dONLNd
  2704. J;òG≠)
  2705. estor3 °dONLNd
  2706. O;ÆG…)e the rü °dONLNd
  2707. V;…G·)esourÁ`°dONLNd
  2708. [;·G)    ce chain .°dONLNd
  2709. dGñS¡(Pñ    with the °dONLNd
  2710. mG¡S˝)+
  2711. UseResFile°dONLNd
  2712. wG˝S    )< prR`°dONLNd
  2713. zG    S&) ocedur$¿°dONLNd
  2714. ÄG&SV) e. If you ar˜ °dONLNd
  2715. åGUS≠)/e not changing the r…İdONLNd
  2716. †G≠Sƒ)Xesourõ‡°dONLNd
  2717. •GƒS
  2718. )ce chain, you do °dONLNd
  2719. ∂Sñ_ı(\ñnot need to save the rR`°dONLNd
  2720. ÃSı_ )_esour$¿°dONLNd
  2721. —S _:) ce chain. ($¿°dONLNd
  2722. ‹S:_v).
  2723. CurResFile$¿°dONLNd
  2724. ÊSv_{)<, $¿°dONLNd
  2725. ËS{_Ω) OpenResFile$¿°dONLNd
  2726. ÛSΩ_’)B, and $¿°dONLNd
  2727. ˘S’_)
  2728. UseResFile$¿°dONLNd S_)< .°dONLNd _ñkû(hñarE°dONLNd _ük7)    "e described in the chapter “Resour9°dONLNd (_7k})òce Manager” of N@°dONLNd 7_}k«)FInside Macintosh: 0@°dONLNd S_»kÙ)K
  2729. Operating °dONLNd ]kñw≥(tñSystemÒİdONLNd ck≥w∏).)
  2730. °dONLNd fÄäáè(Üän
  2731. ˇˇk`.°dONLNd h}ñâû) Aï°dONLNd i}ùâÊ)void calling the ˇ˛B ◊ °dONLNd z}Êâ)IPrErrorˇˇk`◊ °dONLNd Å}âà)* function within the idle pr¬`°dONLNd ù}àâ•)xocedurî¿°dONLNd £}•âº)e. Err“İdONLNd ©}ºâ)ors that occur while .°dONLNd æâñïfi(íñit is executing ar”†°dONLNd –âfiï¥)H0e usually temporary and serve only as internal fl‰‡°dONLNd â¥ï‘)÷ags for °dONLNd     ïñ°J(ûñ'communication within the printer driver„¿°dONLNd 0ïI°)≥-, not for the application. If you absolutely .°dONLNd ]°ñ≠¡(™ñ
  2732. must call °dONLNd g°¡≠Î)+PrError°dONLNd n°Î≠D)* within your idle prR`°dONLNd ǰD≠a)Yocedur$¿°dONLNd à°a≠ï) e and an err˜ °dONLNd î°î≠˘)3or occurs, do not cancel ˇ!Ã@ˇ ˇˇˇˇ@
  2733. ˇ·ˇ‚7^
  2734. 4*\˜, Palatino
  2735. .+l"CHAPTER €`)\1,     Helvetica
  2736.     (@lThe Printing Manager4⁄*˙¯
  2737. (‡*1 )-c)26
  2738.     )9Using the Printing Manager
  2739. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2740. °dONLNd\xh´(ex printing. WŒ¿°dONLNd \™h>)2%ait until the last called printing prQİdONLNd0\?h])ïocedurË¿°dONLNd6\]hh)e r˜`°dONLNd9\hhÔ)  eturns and then check to see if °dONLNdYhxtï(qxthe err^†°dONLNd`hït∑)
  2741. or still rƒ@°dONLNdjh∑t€)"emains. °dONLNdszlÜ
  2742. (Él%For information about installing a pr °dONLNdòzÜ,)¢ocedur™`°dONLNdûz,Üc)
  2743. e to handle r·`°dONLNd´zcÜ‚)7equests to cancel printing or °dONLNd…Ülí¬(èlpause printing, see ô‡°dONLNd›Ü¬íh)V%“Canceling or Pausing the Printing PrY`°dONLNdÜiíµ)ßocess” on page 1-¯`°dONLNdܵíø)L28¯`°dONLNdÜøíƒ)
  2744. . ¯`°dONLNd܃íΔ) 
  2745. ∑*Ω¯4∏*Ω¯ ∏l∏¯
  2746. ˇ·ˇ‚7^
  2747. ˇˇ◊ˇ◊°dONLNd¶l∑¯(≥lOptimizing Printingˇˇˇˇˇˇ®(≥1
  2748. °dONLNd-Ωl…;(Δl,QuickDraw is the primary means you use in orA°dONLNdYΩ<…Ï)–)der to print, and in general you can use .°dONLNdÇ…l’Á(“lQuickDraw in the printing ,
  2749. Courier°dONLNdú…Á’){grafPort°dONLNd§…’ú)0 exactly as you would for a scrR`°dONLNd√…ú’≠)Öeen R`°dONLNd«…≠’›)grafPortR`°dONLNdœ…›’‚)0. °dONLNd—’l·Ç(filTherR`°dONLNd’’Ç·ì)e ar$¿°dONLNdŸ’ì·{)4e a few things to note when drawing to the printing $¿°dONLNd
  2750. ’{·´)ËgrafPort$¿°dONLNd’´·∞)0: ,
  2751.  
  2752. Zapf Dingbats
  2753. .°dONLNdÍlÒq(ln
  2754. .°dONLNdÁxÛÉ) WÛ`°dONLNdÁÇÛ=)
  2755. )ith each new page, you get a completely r≈¿°dONLNdDÁ=Ûw)ª
  2756. einitialized ≈¿°dONLNdQÁwÛß):grafPort≈¿°dONLNdYÁßÛˆ)0, so you’ll need to °dONLNdmÛxˇ|(¸xrR`°dONLNdnÛ|ˇ
  2757. ) eset font information and other R`°dONLNdéÛ
  2758. ˇ:)égrafPortR`°dONLNdñÛ:ˇ•)0 characteristics as desir$¿°dONLNdØÛ•ˇ≥)ked.
  2759. .°dONLNd≥lq(ln
  2760. °dONLNdµxg) 6Don’t make calls that don’t do anything on the printer›@°dONLNdÎfÒ)Ó . For example, erase operations °dONLNd xÄ(xarE°dONLNd
  2761. Å3)    &e quite time-consuming and normally arw °dONLNd33•)≤en’t needed on the printerïİdONLNdM•ß)r.
  2762. °dONLNdO&l-q(,ln
  2763. °dONLNdQ#x/W) 5Don’t use clipping to select text to be printed. Ther#‡°dONLNdÜ#X/h)‡e ar2İdONLNdä#h/—)e a number of subtle dif `°dONLNd¢#—/›)ifer‡°dONLNd•#›/˜) ences °dONLNd´/x;(8x#between how text appears on the scrx °dONLNdŒ/;Ô)°1een and how it appears on the printer; you can’t °dONLNdˇ;xGI(Dx.count on knowing the exact dimensions of the rG¿°dONLNd-;JGÃ)“ectangle occupied by the text.
  2764. °dONLNdLPlWq(Vln
  2765. °dONLNdNMxY´) Don’t use fi®@°dONLNdZM´Y€)3Exed-width fonts to align columns. Since spacing gets adjusted on the °dONLNdüYxeñ(bxprintero¿°dONLNd¶Yñe[),, you should explicitly move the pen to wher°dONLNd“Y\eò)Δe you want it.
  2766. °dONLNd·nluq(tln
  2767. °dONLNd„kxw) &Don’t use the Outline text style to crƆ°dONLNd    kwß)ü!eate white text on a black backgr©`°dONLNd*kßw¿)êound.
  2768. °dONLNd0Äláq(Üln
  2769. .°dONLNd2}xâÄ) Aï°dONLNd3}âi)3void using the QuickDraw erase calls (for example, ï°dONLNdf}iâü)Í    EraseRectï°dONLNdo}üâ™)6).  6†°dONLNds}™â◊)
  2770. An erase r    °dONLNd}}◊âı)-outine .°dONLNdÑâxïT(íx3takes time because every bit (90,000 bits per squarÅ@°dONLNd∑âTï≤)‹e inch) has to be clear‡°dONLNdŒâ≥ïÛ)_ed.  Erasing is °dONLNdfiïx°Ω(ûxHunnecessary because the paper does not need to be erased the way the scr≤†°dONLNd&ïΩ°Ë(ûΩ
  2771. een does. .°dONLNd0°x≠Ä(™xAï°dONLNd1°≠¡)void using the ï°dONLNd@°¡≠Î)BTextBoxï°dONLNdG°Î≠˜)* prg`°dONLNdJ°˜≠) ocedur9¿°dONLNdP°≠í)e, which makes calls to the 9¿°dONLNdl°í≠»)~    EraseRect9¿°dONLNdu°»≠ )6 .°dONLNdv≠xπÅ(∂xprG °dONLNdx≠Çπ†)
  2772. ocedurfi`°dONLNd~≠†π¨)e.  ˙`°dONLNdÇ≠¨π≤) Y∫‡°dONLNdÉ≠≤π&)ou might want to use a difÒİdONLNdù≠&π2)tfer‘°dONLNd†≠2πÛ) ,ent method of displaying text (for example, .°dONLNdÃπx≈¥(¬x
  2773. DrawString°dONLNd÷π¥≈¡)< or °dONLNd⁄π¡≈Ò)
  2774. DrawText°dONLNd‚πÒ≈u)0) or write your own version of °dONLNdπu≈ü)ÑTextBox°dONLNdπü≈¢)*.
  2775. .°dONLNd
  2776. Œl’q(‘ln
  2777. °dONLNd Àx◊) A\@°dONLNd
  2778. À◊‡)void changing fonts fr °dONLNd#À·◊)bequentlyΩ °dONLNd+À◊
  2779. )%.  
  2780. °dONLNd/‡lÁq(Êln
  2781. °dONLNd1›xÈ“) Because of the way r5@°dONLNdE›”È=)[ectangle intersections arf‡°dONLNd^›=È≥)je determined, if your clip r `°dONLNdz›≥È‚)v egion falls ˇˇ˜|.°dONLNdÜÈxıª(Úxoutside of the r8‘°dONLNdñȺı)Dectangle given by the ˇˇÊtƒ°dONLNd¨Èı<)brPageˇˇ˜|ƒ°dONLNd±È<ıD) fi@°dONLNd¥ÈEıfi)    #eld of the printer information subr∂ °dONLNd◊Èfiı)ôecoràl°dONLNd€Èı˜)d .°dONLNd›ıx∞(˛xof the print r\†°dONLNdÎı∞¬)8ecor—°dONLNdÔı¬~)*d, you slow down the printer substantially9‡°dONLNdı~Ä)º.
  2782. &*,¯4'*,¯ 'l'¯
  2783. ˇ·ˇ‚7^
  2784. ˇˇ◊ˇ◊°dONLNdl&B("lOptimizing PostScript Printingˇˇˇˇˇˇ®("1
  2785. °dONLNd:,l8◊(5lQWhile your printing code should be device-independent, you can optimize it for a °dONLNdã8lDé* LaserW◊†°dONLNdë8çD()!&riter printer that uses PostScript. (Y·†°dONLNd∑8(Dq)õou cannot be surİdONLNd«8rDØ)Je that the curr؆°dONLNd÷8ØDÒ)=ent printer is a °dONLNdÁDlPπ(MlPostScript printerΩ¿°dONLNd˘DπP|)M), so you may need to send down two or mor @°dONLNd    "D|PÂ)√e versions of the same fi≠¿°dONLNd    ;DÊPÚ)jle: °dONLNd    ?Pl\„(Ylone for a PostScript printer
  2786. @°dONLNd    [P„\f)w, one for a QuickDraw printerò °dONLNd    xPe\Á)Ç .) For printing to a PostScript °dONLNd    ò\lhä(elprintero¿°dONLNd    ü\ähg)5, you’ll need to observe the following limitations:  
  2787. °dONLNd    ’qlxq(wln
  2788. °dONLNd    ◊nxz¶)
  2789. Regions ar8°dONLNd    ·nßz¿)/?en’t supported; try to simulate them with polygons or bitmaps. 
  2790. °dONLNd
  2791. !Éläq(âln
  2792. °dONLNd
  2793. #Äxå•)
  2794. Clipping r˘‡°dONLNd
  2795. -Ä•å#)-egions should be limited to rQ°dONLNd
  2796. JÄ$å≈)%ectangles. PostScript clips non-squary@°dONLNd
  2797. oÄ≈åÛ)° e patterns °dONLNd
  2798. zåxòú(ïxto squarZ °dONLNd
  2799. Çåúò™)$es. 
  2800. °dONLNd
  2801. á°l®q(ßln
  2802. ˇˇ…$.°dONLNd
  2803. âûx™ã) The ˇˇ[lI$°dONLNd
  2804. çûå™∞)invertˇˇ…$I$°dONLNd
  2805. ìû∞™L)$" data type, part of the QuickDraw ˇˇ[l… °dONLNd
  2806. µûL™|)úgrafverbˇˇ…$… °dONLNd
  2807. Ωû|™˜)0 data type, is not supported .°dONLNd
  2808. ⁄™x∂Á(≥xby the PostScript LaserW¿°dONLNd
  2809. Ú™Á∂8)oriter printer driver<`°dONLNd ™8∂=)Q. ˇ!@ˇ ˇˇˇˇ@
  2810. ˇ·ˇ‚7^
  2811. 4H\, Palatino
  2812. .+ä"CHAPTER €`)\1,     Helvetica
  2813.     (@äThe Printing Manager4⁄ä˙(‡äUsing the Printing Manager
  2814. ~¿(‡1
  2815. ‡)-a¿)27
  2816. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  2817.  
  2818. Zapf Dingbats
  2819. °dONLNd_äfè(eän
  2820. °dONLNd\ñhú) T∫¿°dONLNd\õhÂ)ransfer modes ar¸¿°dONLNd\Âh)Je ignor…¿°dONLNd\hÌ)4ed for all QuickDraw objects except 1-bit bitmaps. WJ`°dONLNdN\Ìh)È
  2821. ith 1-bit .°dONLNdXhñt¿(qñ    bitmaps, ,
  2822. Courier°dONLNdah¿tÍ)*srcCopyd@°dONLNdhhÈtÓ)), d@°dONLNdjhÓt )srcOr¶‡°dONLNdoh t), ¶‡°dONLNdqht4)srcBic¶‡°dONLNdwh4t9)$, ¶‡°dONLNdyh9tu)
  2823. notSrcCopyã °dONLNdÉhttå);, and ã °dONLNdâhåt¬)    notSrcBitã °dONLNdíh¬tŒ)6 ar]İdONLNdïhŒt )
  2824. e drawn. The °dONLNd¢tñÄö(}ñc°dONLNd£töĨ)opy°dONLNd¶t¨Ä)S transfer mode is the only transfer mode supported for all objects except text and .°dONLNd˘Äñå»(âñ bit images. 
  2825. °dONLNdïäúè(õän
  2826. °dONLNdíñû™) Ther¿°dONLNd í´ûˇ)e can be a small difÈ`°dONLNd í˛û
  2827. )SferÀ‡°dONLNd#í
  2828. û≠) $ence in glyph widths between fonts r‡°dONLNdGíÆû«)§enderT@°dONLNdLí«ûˇ)
  2829. ed on the scrP °dONLNdYíˇû)8een °dONLNd]ûñ™Ê(ßñand on the printer °dONLNdoûÊ™ä)P'. Only the endpoints of text strings arh°dONLNdñûä™Ω)§ e the same. 
  2830. °dONLNd£≥ä∫è(πän
  2831. °dONLNd•∞ñº») GPostScript does not support color patterns that use colors other than r0İdONLNdÏ∞…º‚(π…ed, grj°dONLNdÚ∞‚º) een, blue, °dONLNd˝ºñ»Õ(≈ñ cyan, yellow[¿°dONLNd    ºÕ»K)7, magenta, white, and black. 
  2832. °dONLNd'—äÿè(◊än
  2833. °dONLNd)Œñ⁄) The printer may print some lar∫`°dONLNdGŒ⁄)à7ge patterns at half or smaller sizes, depending on its °dONLNd~⁄ñÊô(„ñrE°dONLNd⁄öÊ«) esolution. 
  2834. °dONLNdãÔäˆè(ıän
  2835. °dONLNdçÏñ¯F) %Polygons and smoothed polygons that r     °dONLNd≤ÏG¯Ç)±esult in the cré°dONLNd¡Ïǯ—);eation of paths lar‡°dONLNd‘Ï“¯    )P
  2836. ger than the °dONLNd·¯ñ(ñUlimit of the PostScript printer (typically 1500 or 3000, depending on the version of °dONLNd6ñÃ*
  2837. PostScript) rʇ°dONLNdCÃ2)6esult in a PostScript err(`°dONLNd\3<)gor” °dONLNd^;=).°dONLNd`ä"È(äAlthough the LaserWUİdONLNdsÈ" )_
  2838. riter is rİdONLNd} "Z)#elatively fast, ther”@°dONLNdëZ"j)Ne ar·‡°dONLNdïj")%e some techniques an application can °dONLNd∫"ä.ø(+ä use to ensurÈ¿°dONLNdΔ"ø.>)5e its maximum performance.
  2839. °dONLNd·7ä>è(=än
  2840. °dONLNd„4ñ@) WPrinting patterns takes time, because the bitmap for the pattern has to be built.  The °dONLNd:@ñL    * Tpatterns black, white, and some of the gray patterns have been optimized to use the °dONLNdéLñX¸* PostScript gray scales.  °dONLNd®^äj«(gäBRemember that when your application sends a document to the LaserWSİdONLNdÍ^«j˚(g«
  2841. riter printerú‡°dONLNd˜^˙j)3, it °dONLNd¸jävm(sä1must use immediate printing and cannot use deferrå`°dONLNd-jmv˝)„"ed printing; your print code, the °dONLNdOväÇ‚(äKdocument’s data, and the printer driver have to be in memory simultaneouslyµ‡°dONLNdöv·Ç˚(·. In or†@°dONLNd°v˚Ç )der °dONLNd•ÇäéÆ(ãäto ensur\°dONLNd≠ÇÆéæ)$:e that you have enough memory available to load the LaserW¿‡°dONLNdÁÇΩéÛ(ãΩriter printer °dONLNdıéäö•(óädriverñ†°dONLNd˚é¶ö)R’s code, you should have all the code you need for printing in a separate segment °dONLNdMöä¶(£äand unload everything else. .°dONLNdj¨ä∏Ë*For information on ofR`°dONLNd¨Ë∏¯)^fscr$¿°dONLNdɨ¯∏E)een bitmaps, the $¿°dONLNdî¨E∏u)Mgrafverb$¿°dONLNdú¨u∏)0$ data type, transfer modes, and the .°dONLNd¿∏äƒç(¡ärE°dONLNd¡∏éƒÒ)outines mentioned herÍ`°dONLNd÷∏Òƒ•)c'e, see the chapter “QuickDraw”. For mor{`°dONLNd˝∏¶ƒÚ)µe information on °dONLNdƒä–‹(ÕäPostScript, see the ˚†°dONLNd"ƒ‹–G)RPostScript Language Refer¿`°dONLNd;ƒH–|)l ence Manualfi‡°dONLNdFƒ|–≤)4, available fr(`°dONLNdTƒ≥–√)7om ìİdONLNdWƒ√–ˆ)    Addison-Wg`°dONLNd`ƒˆ– )3esleyì`°dONLNdeƒ –). 
  2842. ıH˚4ˆH˚ ˆäˆ
  2843. ˇ·ˇ‚7^
  2844. ˇˇ◊ˇ◊°dONLNdh‰äıô(ÒäPr· °dONLNdj‰ôıÀ)(oviding Names of Documents Being Printedˇˇˇˇˇˇ®(Ò1
  2845. °dONLNdì˚ä'(ä$Some printers (usually those that arÁ°dONLNd∑˚'A)ùe shar°dONLNdΩ˚BÙ)&ed between many users, like the LaserWâ°dONLNd„˚Û)±riter °dONLNdÈä (äprinter) can prâ¿°dONLNd¯ i)@#ovide the names of the users who ar√†°dONLNdi )ü$e printing and the documents that ar£†°dONLNd? )¢e °dONLNdAä(äbeing printed to others interµÄ°dONLNd^t)|ested in using the printer˜¿°dONLNdxtÇ)n. PrΔ`°dONLNd|É)oviding the names of users and °dONLNdõä+((äUdocuments is a courtesy to other users on the network. The Printing Manager gets the °dONLNd+ä75* %name of the document being printed frŸ°dONLNd    +57è)´om the title on the fr‹ °dONLNd    ++è7˚)Zontmost window on the .°dONLNd    A7äCú(@äuser=`°dONLNd    E7ùC≤)’s scr¿°dONLNd    K7≤C⁄)    een. The ¿°dONLNd    T7⁄C)(    PrOpenDoc¿°dONLNd    ]7C%)6 and ¿°dONLNd    b7%Ca)
  2846. PrValidate¿°dONLNd    l7aCm)< pr‚ °dONLNd    o7lCâ) ocedur¥Ä°dONLNd    u7âC∫) es call the ¥Ä°dONLNd    Å7∫C¸)1 FrontWindow¥Ä°dONLNd    å7¸C˛)B .°dONLNd    çCäOì(LäprG °dONLNd    èCîO≤)
  2847. ocedurfi`°dONLNd    ïC≤O@)!e to get the document’s name.    °dONLNd    ∑Uäa(^äSThe Printing Manager can’t get a document name if your application doesn’t display °dONLNd
  2848.  
  2849. aäm* Uwindows while printing. For example, many applications do not open windows for their °dONLNd
  2850. _mäy"* !documents when the user prints frfi‡°dONLNd
  2851. Äm"y`)ò
  2852. om the Finderi@°dONLNd
  2853. çm`yÄ)>    . If ther>°dONLNd
  2854. ñmÄy•) 
  2855. e is no fr ¿°dONLNd
  2856. †m¶y‹)&
  2857. ont window$°dONLNd
  2858. ™m€y)5 , or if the °dONLNd
  2859. ∂yäÖÚ(Çäwindow’s title is emptyó@°dONLNd
  2860. ÕyÒÖ∑)g,, the Printing Manager defaults to “Unspecifi.†°dONLNd
  2861. ˙y∏Ö )«ed.”°dONLNd
  2862. ˇãäóê(îäY@İdONLNd ãêó») ou can ensur¢‡°dONLNd ã»ó)8He that the document name is available by putting up a window containing °dONLNd Tó䣀(†äa message like “PrhİdONLNd fó€£)QCess Command–period to cancel printing,” and give it the document’s ˇˇ.°dONLNd ©£äØ (¨äNtitle. If the window is one that doesn’t have a title bar (like those of type ˇ˝°dONLNd ˜£ Ø˙(¨ dBoxProcˇˇ°dONLNd ˇ£˙Ø)0), this .°dONLNd ØäªØ(∏äDtitle is not displayed. If you don’t want to put up a visible windowã`°dONLNd KØØª·(∏Ø , you can cr°dONLNd WØ‚ª)3 eate a tiny ˇ!"@ˇ ˇˇˇˇ@
  2863. ˇ·ˇ‚7^
  2864. 4*\˜, Palatino
  2865. .+l"CHAPTER €`)\1,     Helvetica
  2866.     (@lThe Printing Manager4⁄*˙¯
  2867. (‡*1 )-c)28
  2868.     )9Using the Printing Manager
  2869. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  2870. ˇˇ∞.°dONLNd\lh‰(elwindow (for instance, type ,
  2871. Courierˇˇ@°dONLNd\Âh)y    plainDBoxˇˇ∞@°dONLNd$\h¯)63) and hide it behind the menu bar by giving it the .°dONLNdWhltù(ql global coor}@°dONLNdbhùtY)1,dinates of (1,1,2,2). See the chapter “The WÆ¿°dONLNdéhYt≤)ºindow Manager” in İdONLNd†h≥tÕ)ZInside °dONLNdßtlÄô(}l
  2872. Macintosh:.İdONLNd±tôÄõ)- .İdONLNdºtõÄŒ) Macintosh Ta°dONLNd«tŒÄÁ)3oolbox.°dONLNdÕtËÄL) for information about °dONLNd‰tLÄ|)ddBoxProc°dONLNdÏt|Äë)0 and °dONLNdÒtëÄ«)    plainDBox°dONLNd˙t«ÄÔ)6 window .°dONLNdÄlåà(âltypes. 
  2873. ô*¶¯4ö*•¯
  2874. °dONLNdˇˇ*NOTE
  2875. ˇ·ˇ‚7^
  2876. °dONLNd
  2877. £lØ.* +Do not set the document name in the print rX`°dONLNd5£.Ø@)¬ecorÿ°dONLNd9£@ØU)d dir1†°dONLNd>£VØj)ectly    †°dONLNdC£jØè)
  2878. . Not all °dONLNdMØlªÌ(∏lprinter drivers support this fi¸ °dONLNdlØÌª)Å    eld, and ÿ†°dONLNduتõ)&Apple does not guarantee that °dONLNdìªl«ñ(ƒl
  2879. internal fi~‡°dONLNdûªó«)+elds of the Printing Manager¡°dONLNd∫ª«@) ’s data strÅ`°dONLNd≈ªA«X)+uctur@°dONLNd ªY«|)    es will r„°dONLNd”ª{«ò)"emain °dONLNdŸ«l”ï(–l    the same.,
  2880.  
  2881. Zapf Dingbats
  2882. 8°dONLNdˇˇ)-u
  2883. ܰdONLNdˇˇ) 
  2884. ˘*ˇ¯4˘*˛¯ ˘l˘¯
  2885. ˇ·ˇ‚7^
  2886. ˇˇ◊ˇ◊°dONLNd¯Ál¯i(Ùl$Canceling or Pausing the Printing Pr£@°dONLNdÁi¯ç)˝ocessˇˇˇˇˇˇ®)á1
  2887. °dONLNd"˛l
  2888. ∑(lIf you install a pr °dONLNd5˛∏
  2889. ÷)Locedur¶`°dONLNd;˛÷
  2890. )e for handling r`¿°dONLNdK˛
  2891. ‡)E.equests to cancel printing, do not include an °dONLNdy
  2892. lÙ(loption to pause the printing prè@°dONLNdò
  2893. Ùñ)à#ocess. Pausing may cause timeout pr~‡°dONLNdª
  2894. ñ”)¢ oblems when °dONLNd«l"–(lprinting to the LaserW&†°dONLNd›–")d
  2895. riter printerp°dONLNdÍ"Î)30.  Communication between the Macintosh computer °dONLNd"l.±(+land the LaserW¢ °dONLNd("±.6)Eriter must be maintained to prï¿°dONLNdF"6.÷)Ö'event a job or a wait timeout.  If ther¸‡°dONLNdm"÷.Ù)†e is no °dONLNdu.l:Ê(7lUcommunication for a period of time (over two minutes), the printer times out and the °dONLNd :lFc* 9print job terminates due to a wait timeout.  Because therÕ`°dONLNd:cFÎ)˜e is no good way to determine °dONLNd!FlRº(Olthe type of printer3¿°dONLNd4FºR)P, you should be awarª‡°dONLNdHFR†)\ e of the possibility of a LaserW9İdONLNdhF†Rˆ)àriter printer timing °dONLNd}Rl^è([lBout for a user who wants to pause printing for over two minutes.  
  2896. Ñ*ä¯4Ñ*⯠Ñlѯ
  2897. ˇ·ˇ‚7^
  2898. ˇˇ◊ˇ◊°dONLNd¿rlÉ*$Handling Printing Err;P°dONLNd’rÉ)ôorsˇˇˇˇˇˇ®)Î1
  2899. .°dONLNdŸâlïs(ílYï°dONLNd⁄ârï˚)ou should always check for errg`°dONLNd¯â˚ïº)â,or conditions while printing by calling the g`°dONLNd$âºïÊ)¡PrErrorg`°dONLNd+âÊïË)* .°dONLNd,ïl°§(ûl
  2900. function. Erra†°dONLNd9ï§°∏)8ors rK¿°dONLNd>ï∏°)eturned may include ㇰdONLNdRï°7)^AppleT? °dONLNdXï7°π)!alk and Operating System err6`°dONLNdtïπ°‘)Çors in °dONLNd{°l≠¸(™l addition to Printing Manager err‡°dONLNdõ°˝≠
  2901. )ëors..°dONLNd†≥løõ(ºl Don’t call °dONLNd´≥õø≈)/PrError°dONLNd≤≥≈øœ)* frR`°dONLNdµ≥œø5)
  2902. om within your idle pr$¿°dONLNdÀ≥5øR)focedur˜ °dONLNd—≥Qøm)e. See ˜ °dONLNdÿ≥mø})“W9¿°dONLNd⁄≥}ø≈)riting an Idle Pr  °dONLNdÎ≥≈ø‚)HocedurfiİdONLNdÒ≥·øÌ)e” .°dONLNdÙølÀô(»l
  2903. on page 1-u†°dONLNd˛øöÀ§).25u†°dONLNdø§À«)
  2904.  for mor@ °dONLNdø»À    )$e information. °dONLNd—l›Ê(⁄lIf you determine that an err¢@°dONLNd4—Ê›)z
  2905. or has occurr-İdONLNdA— ›Δ):'ed after the completion of a printing rj`°dONLNdh—Δ›Á)¶outine, °dONLNdp›lÈÎ(Êlstop printing. Call the close r†°dONLNdè›ÏÈt)Äoutine that matches any open r懰dONLNd≠›tÈÓ)àoutine you have called. For .°dONLNd…Èlı»(Úlexample, if you call °dONLNdfiÈ»ı˛)\    PrOpenDoc°dONLNdÁÈ˛ı)6 and rR`°dONLNdÌÈıV)eceived an err$¿°dONLNd˚ÈVı_)?org`°dONLNd˝È^ı´), skip to the next g`°dONLNdÈ´ıÁ)M
  2906. PrCloseDocg`°dONLNdÈÁıˆ)<; if °dONLNdılù(˛l you called °dONLNd*ıùŸ)1
  2907. PrOpenPage°dONLNd4ıŸ)< and got an errR`°dONLNdCı!)?orï°dONLNdEı m), skip to the next ï°dONLNdXımØ)M PrClosePageï°dONLNdcı؃)B and ˇˇ‹Æ°dONLNdhl
  2908. ®(
  2909. l
  2910. PrCloseDocˇˇÙ:°dONLNdr®
  2911. Ç)</. Remember that if you have called some open prËj°dONLNd°Ç
  2912. ü)⁄ocedur∫ °dONLNdßü
  2913. ˜)e, you must call the .°dONLNdº
  2914. l}(lcorr`°dONLNd¿
  2915. ~⁄)esponding closing prÏ¿°dONLNd‘
  2916. ⁄¯)\ocedurѰdONLNd⁄
  2917. ˘$)
  2918. e to ensur©†°dONLNd‰
  2919. $µ)+#e that the printer driver closes prܰdONLNd
  2920. µÁ)ë operly and °dONLNdl%!("l(that all temporary memory allocations arÖ‡°dONLNd:!%,)µe rîİdONLNd=,%f)
  2921. eleased and r‰†°dONLNdJf%¡):eturned to the heap. 
  2922. D*K¯4D*J¯ ElE¯
  2923. ˇ·ˇ‚7^
  2924. °dONLNd`6lDé(@lUsing ûİdONLNdf6éDH)"#Alert or Dialog Boxes to Report ErrºÄ°dONLNdâ6HDX)∫orsˇˇˇˇˇˇ)™1
  2925. °dONLNdçPl\.(Yl-Do not display any alert or dialog boxes to r¿¿°dONLNd∫P.\a)¬ eport an err↰dONLNdΔPb\Î)4!or until the end of the printing °dONLNdÁ\lh(el)loop.  Once at the end, check for the err∏`°dONLNd    \h\)≠or again; if therH°dONLNd    !\]hà)D e is no err °dONLNd    ,\àhÚ)+or assume that printing °dONLNd    Dhlt≈(qlcompleted normallyÁ@°dONLNd    VhƒtÒ)X
  2926. .  If the errx@°dONLNd    chÚt$).or is still prÖ`°dONLNd    qh$tµ)2"esent, then you can alert the userχ°dONLNd    ìh¥tŒ)ê. This °dONLNd    ötlĢ(}l technique is important for two r£@°dONLNd    ∫t˘Ä)ç    easons.  °dONLNd    ƒÜlíÌ(èl]First of all, if you display a dialog box in the middle of the printing loop, it could cause °dONLNd
  2927. !ílûx* err@°dONLNd
  2928. $íyû€)
  2929. Sors that can terminate an otherwise normal job.  For example, if the printer is an °dONLNd
  2930. wûl™ç(ßlAppleT3@°dONLNd
  2931. }û癪)! alk printerİdONLNd
  2932. àûª™).E, the connection can be terminated abnormally since the driver would °dONLNd
  2933. Õ™l∂®(≥lbe unable to r‡@°dONLNd
  2934. €™®∂÷)<
  2935. espond to • °dONLNd
  2936. ™÷∂˜).AppleTX`°dONLNd
  2937. Ι˜∂
  2938. )!alk r‡°dONLNd
  2939. ™ ∂2)    equests rI¿°dONLNd
  2940. ˘™2∂])'
  2941. eceived frZ °dONLNd ™]∂È)+ om the printer while the dialog ˇ!ö@ˇ ˇˇˇˇ@
  2942. ˇ·ˇ‚7^
  2943. 4H\, Palatino
  2944. .+ä"CHAPTER €`)\1,     Helvetica
  2945.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  2946. ~¿(‡1
  2947. ‡)-a¿)29
  2948. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  2949. °dONLNd\äh(eäbox was waiting for input fr^†°dONLNd\h:)| om the user»Ä°dONLNd'\9h¿)3".  If the printer does not hear frM°dONLNdI\¡h)àom the Macintosh °dONLNdZhätW(qä-system within a short period of time (anywher‰°dONLNdáhWte)Õe frFİdONLNdãhft‰)om 30 seconds to 2 minutes, °dONLNdßtäÄÌ(}äPdepending on the driver), it assumes that the Macintosh system is no longer ther `°dONLNd˜tÌÄ(}Ìe and °dONLNd˝ÄäåÙ(âätimes out. The timeout rÃİdONLNdÄÙå,)jesults in a prB‡°dONLNd#Ä-åL)9ematurÔ°dONLNd)ÄLåe)ely br¸¿°dONLNd/Äeå˚)!oken connection, causing another °dONLNdPåäòñ(ïäerr@°dONLNdSåóò†)
  2950. or¨°dONLNdUåüò.)!, to which the application must rͰdONLNdvå.òh)è
  2951. espond. (See ¸@°dONLNdÉåhò):#“Canceling or Pausing the Printing °dONLNd¶òä§ì(°äPrN†°dONLNd®ò)
  2952. ocess” on page 1-̆°dONLNdπò‡§Í)L28̆°dONLNdªòͧÔ)
  2953. .)°dONLNdæ™ä∂¬(≥ä The second r⁄@°dONLNd ™¬∂b)8%eason is that the driver may have alr´†°dONLNdÔ™c∂)°%eady displayed its own dialog box in °dONLNd∂ä¬ç(øärE°dONLNd∂鬟)esponse to an err%¿°dONLNd&∂Ÿ¬‚)Kor–İdONLNd(∂·¬í),.  In this instance, the driver posts an errª °dONLNdT∂í¬˚)±or to let the application °dONLNdn¬äŒ(Àäknow that something went wr@°dONLNd⬌)Ü:ong and it should cancel printing.  For example, when the °dONLNd√Œä⁄¨(◊äLaserW◊†°dONLNd…Œ´⁄H)!&riter driver detects that the Laser Pr†°dONLNdÔŒI⁄ )û+ep version that has been downloaded to the °dONLNd⁄äʨ(„äLaserW◊†°dONLNd ⁄´Ê÷)! riter is dif°dONLNd,⁄◊Ê„),fer„İdONLNd/⁄‚Ê˘) ent frY¿°dONLNd5⁄˙Ê)@om that with which the user is trying to print, it displays the °dONLNduÊäÚû(ÔäapprI@°dONLNdyÊüÚ)Vopriate dialog box informing the user of the situation and giving the user the option °dONLNdœÚä˛ô(˚äof ré`°dONLNd”Úô˛ˇ)einitializing the printer †°dONLNdÏÚˇ˛)f?.  If the user chooses to cancel printing, the driver posts an °dONLNd+˛ä
  2954. ñ(äerr@°dONLNd.˛ó
  2955. )
  2956. Zor to let the application know that it needs to cancel printing, but since the driver has .°dONLNdà
  2957. äò(äalrR`°dONLNdã
  2958. ò€)eady taken car$¿°dONLNdô
  2959. € )C e of the err˜ °dONLNd•
  2960.  ≤)0&or by displaying a dialog box, the err…İdONLNdÀ
  2961. ≤À)ßor is rõ‡°dONLNd“
  2962. ÀÍ)eset to ,
  2963. Courierõ‡°dONLNd⁄
  2964. Í)0õ‡°dONLNd€
  2965.     ) beforn@°dONLNd·
  2966.     )e .°dONLNd„ä"¡(äHthe printing loop is complete.  The application should check for the err≤‡°dONLNd+¡"(¡or again at the °dONLNd;"ä.s(+ä:end of the printing loop, and if it still indicates an errC °dONLNdu"t.})Íoṙ°dONLNdw"|.)#, the application can then display °dONLNdö.ä:Ø(7äthe appr¶†°dONLNd¢.Ø:)%opriate dialog box.
  2967. XH_4YH_ ZäZ
  2968. ˇ·ˇ‚7^
  2969. °dONLNd∂KäYØ(UäInterpr¶¿°dONLNdΩKØY)%eting PrGeneral Err‡@°dONLNd–KY&)gorsˇˇˇˇˇˇ)˙1
  2970. .°dONLNd‘eäq∞(nä    If you arR`°dONLNd›e∞q‚)& e using the R`°dONLNdÈe‚q)2    PrGeneralR`°dONLNdÚeq$)6 pr$¿°dONLNdıe$qA) ocedur˜ °dONLNd˚e@q`)e, be pr…İdONLNde`qu) eparõ‡°dONLNdeuqë)ed to rn@°dONLNdeëq˝)eceive the following err@†°dONLNd&e˝q)lors:  ˇˇKd°dONLNd,qä}¿(zä    noSuchRslˇˇ√ðdONLNd5q¿}ƒ)6, ˇˇKdCðdONLNd7q≈}˚)    opNotImplˇˇ√ÃCðdONLNd@q˚})6, and ˇˇKdÀd°dONLNdFq}T) resNotFoundˇˇ√ÃÀd°dONLNdQqT}Ñ)B
  2971. .  In all thr¨Ù°dONLNd^qÑ})0!ee cases, the application should .°dONLNd}äâ†(Üäbe pr`°dONLNdÑ}°â¥)epar© °dONLNdà}¥âÑ)0ed to continue to print without using the featur†°dONLNd∏}Öâ)—es of that particular opcode..°dONLNd÷èäõû(òäThe °dONLNd⁄èûõ‡) resNotFound°dONLNdÂè‡õÔ)B errR`°dONLNdÈèÔõ;)or means the curr$¿°dONLNd˙è;õË)L(ent printer driver does not support the °dONLNd"õäß¿(§ä    PrGeneral°dONLNd+õ¿ßÃ)6 prR`°dONLNd.õÃßÈ) ocedur$¿°dONLNd4õÈ߆)+e.  This lack of support should not be a pr˜ °dONLNd_õüß·)∂oblem for your .°dONLNdnßä≥(∞ä"application, but you need to be pr‰`°dONLNdêß≥2)ïeparu °dONLNdîß3≥ó)ed to deal with this errm†°dONLNd¨ßó≥†)dor`°dONLNdÆß†≥»)     .  If you rİdONLNdπß»≥Ì)(    eceive a .°dONLNd¬≥äøÃ(ºä resNotFound°dONLNdÕ≥Ãø“)B rR`°dONLNdœ≥“ø)
  2972. esult code fr$¿°dONLNd‹≥ø)6om $¿°dONLNdfl≥øA)PrErrorg`°dONLNdÊ≥@ø})), clear the err9¿°dONLNdı≥}ø»)=or with a call to 9¿°dONLNd≥»ø)K
  2973. PrSetError9¿°dONLNd≥ø)< ˇˇR⁄°dONLNdøäÀX(»ä/with a value of 0 as the parameter; otherwise, ˇ˝¯éi™°dONLNdAøYÀÉ)œPrErrorˇˇR⁄i™°dONLNdHøÉÀ˙)* might still contain this err⁄L°dONLNdeø˙À)wor the .°dONLNdlÀä◊7(‘ä&next time you check it, which would prÄ¿°dONLNdíÀ7◊§)≠event your application fr °dONLNd´À•◊‹)n om printing.
  2974. ‹H˜4›H˜
  2975. H4    H     H    
  2976. ˇ·ˇ‚7^
  2977. ˇˇ£‰ˇÆ°dONLNd∏ıHó(H    Referenceˇˇˇˇˇˇ⁄|( 1
  2978. °dONLNd¬ä$(!ä#This section describes the data strï`°dONLNdÂ$5)îuctur@°dONLNdÍ6$G)es, rʇ°dONLNdÔG$É)outines, and rò`°dONLNd˝Ñ$ú)=esour‡†°dONLNd    ú$µ)ces prû†°dONLNd    ∂$ı)ovided by the °dONLNd    $ä0ÿ(-äPrinting Manager‡°dONLNd    &$ÿ0›)N. °dONLNd    )6äBΔ(?ä
  2979. The “Data Strú °dONLNd    66ΔB›)<uctur"°dONLNd    ;6fiB~)%es” section shows the Pascal data stra¿°dONLNd    `6~Bï)†ucturÁ†°dONLNd    e6ïB¸)es used by the Printing °dONLNd    }BäN±(KäManagerT†°dONLNd    ÑB±N^)'(. The “Routines” section describes the rDİdONLNd    ¨B^N)≠)outines you can use to print a document, °dONLNd    ’NäZì(WäprG °dONLNd    ◊NîZù)
  2980. =oduce or alter a printing dialog box, and handle printing errQ¿°dONLNd
  2981. NùZØ(Wùors. 
  2982. áHè4àHè àHà
  2983. ˇ·ˇ‚7^
  2984. ˇˇ◊ˇ◊°dONLNd
  2985. vHáÄ(ÉHData Str¢Ä°dONLNd
  2986. "vÄá•)8uctur|–°dONLNd
  2987. 'v•á≥)%esˇˇˇˇˇˇ®(É1
  2988. °dONLNd
  2989. *ìäüæ(úä The data str˜‡°dONLNd
  2990. 6ìæü’)4uctur}¿°dONLNd
  2991. ;ì÷üº)5es of the Printing Manager primarily fall into two gr{@°dONLNd
  2992. pìºüÎ)Ê oups: the rY`°dONLNd
  2993. {ìÎü˝)/ecorÕ¿°dONLNd
  2994. ì˝ü    )ds .°dONLNd
  2995. Çüä´Ø(®äand subrR`°dONLNd
  2996. äüØ´¡)%ecor$¿°dONLNd
  2997. éü¡´)ds of the print r˜ °dONLNd
  2998. üü´)Eecor…İdONLNd
  2999. £ü´L) d, and the rõ‡°dONLNd
  3000. ØüL´^)4ecorn@°dONLNd
  3001. ≥ü^´ü)ds used by the n@°dONLNd
  3002. ¬üü´’)A    PrGeneraln@°dONLNd
  3003. Àü’´·)6 pr@†°dONLNd
  3004. Œü·´˛) ocedur°dONLNd
  3005. ‘ü˛´)e. ˇR@ˇ ˇˇˇˇ@
  3006. ˇ·ˇ‚7^
  3007. 4*\˜, Palatino
  3008. .+l"CHAPTER €`)\1,     Helvetica
  3009.     (@lThe Printing Manager4⁄*˙¯
  3010. (‡*1 )-c)30
  3011.     )9    Reference
  3012. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3013. °dONLNd\lhŒ(elIn almost all cases, a fiÚİdONLNd\Œhâ)b+eld in one of the Printing Manager data str¿†°dONLNdD\äh°)ºucturFİdONLNdI\¢hÒ)es that is listed as °dONLNd^hltã(qlbeing r_ °dONLNdehãtb)/eserved contains device-dependent information. )°dONLNdîhcti)ÿYÈİdONLNdïhht¨)ou should not r√İdONLNd§h¨t‹)D ely on this °dONLNd∞tlÄe(}l8information being available or accurate when printing frjİdONLNdËteÄ√)˘om your application. 
  3014. §*¨¯4•*¨¯ •*•˛
  3015. ˇ·ˇ‚7^
  3016. °dONLNd˛ó*•Q(°*TPrint  7¿°dONLNdóR•U)( ˇˇˇˇˇˇ(°Ú1
  3017. .°dONLNd¨l∏Ä(µlThe ,
  3018. Courier°dONLNd ¨Ä∏§)TPrint°dONLNd¨§∏™)$ rR`°dONLNd¨™∏º)ecor$¿°dONLNd¨º∏˝)d is the print r˜ °dONLNd(¨¸∏)@ecor…İdONLNd,¨∏Ω)%d that every document must have beforõ‡°dONLNdQ¨Ω∏Á)Ø
  3019. e you can °dONLNd[∏lƒã(¡lCprint it. It contains handles to the print information and job subrR`°dONLNdû∏ãƒù(¡ãecor$¿°dONLNd¢∏ùƒ≠)ds ($¿°dONLNd¶∏≠ƒ◊)TPrInfo$¿°dONLNd≠∏◊ƒ‹)*, °dONLNd؃l–•(Õl
  3020. described on °dONLNdºƒ•–Δ)9page 1-°dONLNd√ƒΔ––)!31°dONLNd≈ƒ––Â)
  3021.  and °dONLNd ƒÂ–    )TPrJob°dONLNd–ƒ    –G)$, described on °dONLNdflƒG–h)>page 1-°dONLNdʃh–r)!31°dONLNd˃r–{)
  3022. ). °dONLNdÏ‹lËΔ(ÂlTPrint = RECORD°dONLNdÍ~ˆˆ+iPrVersion: Integer;°dONLNd͸ˆ§)~{ Printing software version}°dONLNd<¯~fi(~prInfo: TPrInfo;°dONLNdRêŒ+5{ the PrInfo data associated with the current style.}°dONLNdå~ Ã(~
  3023. rPaper: Rect;°dONLNdüÍ Ê)l*{ The paper rectangle [offset from rPage]}°dONLNdŒ"~.“(+~prStl: TPrStl;°dONLNd‚"Í.§)l{  This print request's style.}°dONLNd0~<Í(9~prInfoPT: TPrInfo;°dONLNd0Í<>)l  { Reserved }°dONLNd/>~JÍ(G~prXInfo: TPrXInfo;°dONLNdGLêXò+,{  Print-time (expanded) Print info record.}°dONLNdxZ~f“(c~prJob: TPrJob;°dONLNdåhêtò+,{ The Print Job request  Total of the above;°dONLNdævêÇn*%120-82 = 38 bytes needed to fill 120}°dONLNdËÑ~êD(ç~!printX: ARRAY [1..19] OF Integer;°dONLNdíêû>+{Spare to fill to 120 bytes!}°dONLNd1†~¨ñ(©~END;
  3024. ª*À¯4º* ¯
  3025.     .°dONLNdˇˇ(√lField descriptions
  3026. ˇ·ˇ‚7^
  3027. .°dONLNd6»l‘®*
  3028. iPrVersion.°dONLNdA»»‘Ÿ)\@The version of the Printing Manager that initialized this print .°dONLNdÅ‘»‡Ã* rR`°dONLNdǑÇfi)ecor$¿°dONLNdÜ‘fi‡)
  3029. d. It is r˜ °dONLNdꑇÜ)"ecommended that you use the ˜ °dONLNd¨‘܇¬)Ü
  3030. PrDrvrVers˜ °dONLNd∂‘¬‡Í)<
  3031.  function .°dONLNd¿‡»ÏÀ(È»(”‡°dONLNd¡‡ÀÏÎ)page 1-†°dONLNd»‡Ïψ)!58†°dONLNd ‡ˆÏ±)
  3032. +) instead if you want to determine the curr'`°dONLNdı‡±ÏÔ)ªent version of °dONLNdÏ»¯˜(ı»Ethe printer driver; your application may not have updated this print °dONLNdI¯»À* rE°dONLNdJ¯Ãfi)ecorπ`°dONLNdN¯fi)d for the currİdONLNd\¯H); ent printerj†°dONLNdg¯GS)..    .°dONLNdmlê(lprInfo.°dONLNdt»±)\3The information needed for page composition. This r†°dONLNdß≤ƒ)Íecorç°dONLNd´ƒ˜)
  3033. d is of type .°dONLNd∏»Ú(»TPrInfo°dONLNdøÚZ)*, which is described on °dONLNd◊Z{)hpage 1-°dONLNdfi{Ö)!31°dONLNd‡Öà)
  3034. .°dONLNd‚"l.ê(+lrPaper.°dONLNdÈ"».˚)\ The paper r¡@°dONLNdÙ"˚.>)3ectangle. This r¨Ä°dONLNd">.Õ)Cectangle encompasses the page r°dONLNd#"Œ.˜)ê
  3035. ectangle, .°dONLNd-.»:(7»which is specifi°dONLNd=.:<)H
  3036. ed by the °dONLNdG.<:Z),rPage°dONLNdL.Z:c) fi°dONLNdO.c:Î)    eld of the printer information .°dONLNdn:»FÀ(C»rE°dONLNdo:ÃFfi)ecorπ`°dONLNds:fiF$)d, described on ˆ†°dONLNdÉ:$FD)Fpage 1-%`°dONLNdä:EFO)!31%`°dONLNdå:OFQ)
  3037. ..°dONLNdéIlUä(RlprStl.°dONLNdîI»U˘)\ The printer&@°dONLNdüI˚U÷)31’s device number and the feed type, described on T‡°dONLNd–I÷UÌ)€page °dONLNd’U»a–(^»1-”‡°dONLNd◊U–a⁄)33”‡°dONLNdŸU⁄a‹)
  3038. ..°dONLNd€dlpú(mlprInfoPT.°dONLNd‰d»p)\ Reserved by 4‡°dONLNddp!)9Apple. .°dONLNd¯slñ(|lprXInfo.°dONLNds»)\ Reserved by 4‡°dONLNd s!)9Apple. .°dONLNdÇléä(ãlprJob.°dONLNdÇ»é¨)\5Information about this particular printing job. The r±Ä°dONLNdOǨéÛ)‰esults of the job .°dONLNdaé»ö^(ó»$dialog box sets its contents. This rR`°dONLNdÖé^öp)ñecor$¿°dONLNdâépö§)
  3039. d is of type $¿°dONLNdñé§ö»)4TPrJob$¿°dONLNdúé»ö˜)$ , which is .°dONLNdßö»¶(£»
  3040. described on °Ä°dONLNd¥ö¶#);page 1-–@°dONLNdªö#¶-) 31–@°dONLNdΩö-¶2)
  3041. . .°dONLNd¿©lµê(≤lprintX.°dONLNd«©»µ)\ Reserved by 4‡°dONLNd”©µ)9Apple.ˇΔ@ˇ ˇˇˇˇ@
  3042. ˇ·ˇ‚7^
  3043. 4H\, Palatino
  3044. .+ä"CHAPTER €`)\1,     Helvetica
  3045.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3046. ~¿(‡1
  3047. ‡)-a¿)31
  3048. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3049. °dONLNd\ähˆ(eäIf you try to use a print r˝¿°dONLNd\ˆh)lecorr °dONLNd\    hÄ)d that’s invalid for the curr} °dONLNd<\Ähˆ)went version of the Printing °dONLNdXhätÒ(qäManager or for the currBİdONLNdohÚtQ)hently installed printerv`°dONLNdÜhQt‹)_ , the Printing Manager will corr‘İdONLNd¶h‹t˚)ãect the °dONLNdÆtäÄç(}ärE°dONLNdØtéĆ)ecorπ`°dONLNd≥t†Äº)d by fi¯†°dONLNd∫tºÄ5)lling it with default values. °dONLNdŸÜäíê(èäY@İdONLNd⁄ÜêíV)/ou should not alter the contents of the print rä`°dONLNd    ÜVíh)Δecor˛¿°dONLNd
  3050. Ühí})d dirc†°dONLNdÜ~íí)ectly;†°dONLNdÜííó). 
  3051. ∂Hæ4∑Hæ ∑H∑
  3052. ˇ·ˇ‚7^
  3053. °dONLNd©H∑s(≥HTPrInfo gİdONLNd"©t∑z),  ˇˇˇˇˇˇ(≥1
  3054. .°dONLNd%æä û(«äThe ,
  3055. Courier°dONLNd)æû »)TPrInfo°dONLNd0æ» Œ)* rR`°dONLNd2挠‡)ecor$¿°dONLNd6懠p)!d is the printer information subr˜ °dONLNdWæo Å)èecor…İdONLNd[æÅ √)d of the print rõ‡°dONLNdkæ√ ’)Becorn@°dONLNdoæ’ )d. It contains .°dONLNd~ ä÷(”äthe vertical and horizontal rà‡°dONLNdõ ÷ò){"esolutions of the printer and coorÑ`°dONLNdΩ ò÷Ó)ìdinates of the page °dONLNd—÷ä‚ç(flärE°dONLNd“÷é‚∑)
  3056. ectangle. .°dONLNd›Óä˙Í(˜äTPrInfo = RECORD°dONLNdÚ¸ú+iDev: Integer;°dONLNd¸»)l {Font mgr/QuickDraw device code}°dONLNd+
  3057. úˆ(úiVRes: Integer;°dONLNd@
  3058. )l-{Resolution of device, in device coordinates}°dONLNdrú$ˆ(!úiHRes: Integer;°dONLNdá&Æ2¬+.{..note: V before H => compatable with Point.}°dONLNd∫4ú@‰(=ú rPage: Rect;°dONLNdÀBúNÊ*7{The page (printable) rectangle in device coordinates.}°dONLNdPú\¥*END;
  3059. kH{4lHz
  3060.     .°dONLNdˇˇ(säField descriptions
  3061. ˇ·ˇ‚7^
  3062. .°dONLNd xäÑ¢*iDev.°dONLNdxÊÑ)\ Reserved by 4‡°dONLNdxÑ<)9Apple..°dONLNd$áäì®(êäiVRes.°dONLNd*áÊì)\ The printer&@°dONLNd5áìI)3
  3063. ’s vertical r’`°dONLNdBáIì)0.esolution in dots per inch. The default value .°dONLNdpìÊüú(úÊ*is 72, unless you have made a call to the °dONLNdöìúü“)∂    PrGeneral°dONLNd£ì“üfi)6 prR`°dONLNd¶ìfiü˚) ocedur$¿°dONLNd¨ì˚ü)e ˇˇ«°dONLNdÆüÊ´(®Ê    with the ˇˇUT8°dONLNd∑ü´5)+SetRslˇˇ«8°dONLNdΩü5´ì)$ opcode (described in *®°dONLNd”üì´)^“Determining the Resolution .°dONLNdÔ´Ê∑(¥Ê of the Curr¸Ä°dONLNd˙´∑z)0ent Printer” on page 1-Ñ °dONLNd´{∑Ö)e17Ñ °dONLNd´Ö∑ç)
  3064. ). .°dONLNd∫äΔ®(√äiHRes.°dONLNd∫ÊΔ)\ The printer&@°dONLNd(∫ΔV)3’s horizontal rɰdONLNd7∫VΔ)=(esolution in dots per inch. The default .°dONLNd_ΔÊ“∏(œÊ0value is 72, unless you have made a call to the °dONLNdèΔ∏“Ó)“    PrGeneral°dONLNdòΔÓ“)6 °dONLNdô“Êfi(€ÊprR`°dONLNdõ“fi
  3065. )
  3066. ocedur$¿°dONLNd°“
  3067. fi?) e with the $¿°dONLNd¨“?fio)2SetRslOp$¿°dONLNd¥“ofiï)0     opcode. °dONLNdæ·äÌ®(ÍärPage.°dONLNdƒ·ÊÌ)\
  3068. The page r[†°dONLNdŒ·ÌX)/ectangle. This rF‡°dONLNdfi·XÌ÷)Cectangle is inside the paper r¢`°dONLNd¸·÷Ìˇ)~
  3069. ectangle, .°dONLNdÌÊ˘(ˆÊspecifi°dONLNd
  3070. Ì˘0)
  3071. ed by the °dONLNdÌ0˘T),rPaper°dONLNdÌT˘])$ fi°dONLNd Ì]˘®)    eld of the print rR`°dONLNd2Ì®˘∫)Kecor$¿°dONLNd6Ì∫˘˛)d, described on $¿°dONLNdFÌ˛˘)Dpage .°dONLNdK˘ÊÓ(Ê1-”‡°dONLNdM˘Ó¯)30”‡°dONLNdO˘¯õ)
  3072. (. The style dialog box sets this value. 
  3073. *H24*H1 *H*
  3074. ˇ·ˇ‚7^
  3075. °dONLNdxH*o(&HTPrJob °dONLNdp*s)( ˇˇˇˇˇˇ(&1
  3076. .°dONLNdÅ1ä=û(:äThe °dONLNdÖ1û=¬)TPrJob°dONLNdã1¬=÷)$ subrR`°dONLNdê1÷=Ë)ecor$¿°dONLNdî1Ë=
  3077. )    d of the $¿°dONLNdù1
  3078. =1)%TPrint$¿°dONLNd£11=P)$ print r˜ °dONLNd´1O=a)ecor…İdONLNdØ1a=Î)d contains information about a .°dONLNdŒ=äI˛(FäWparticular printing job. The user accepting the contents of the job dialog box or your .°dONLNd%IäUˆ* application calling the °dONLNd=IˆU>)l PrintDefault°dONLNdII>UJ)H prR`°dONLNdLIJUg) ocedur$¿°dONLNdRIgUr)e ($¿°dONLNdUIrUì) page 1-$¿°dONLNd\IìUù)!42$¿°dONLNd^IùUÎ)
  3079. ) sets its contents.ˇ˙@ˇ ˇˇˇˇ@
  3080. ˇ·ˇ‚7^
  3081. 4*\˜, Palatino
  3082. .+l"CHAPTER €`)\1,     Helvetica
  3083.     (@lThe Printing Manager4⁄*˙¯
  3084. (‡*1 )-c)32
  3085.     )9    Reference
  3086. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3087. Courier
  3088. .°dONLNd\lhΔ(elTPrJob = RECORD°dONLNdj~vÍ+iFstPage: Integer;°dONLNd*jÍvˆ)l  °dONLNd0jv\)$
  3089. {Page Range.}°dONLNdBx~ÑÍ(Å~iLstPage: Integer;°dONLNdYÜ~í‰*iCopies: Integer;°dONLNdn܉íˆ)f   °dONLNduÜíÄ)*{Number of copies.}°dONLNdçî~†(ù~bJDocLoop: SignedByte; °dONLNd®î†»)ä  {The Doc style: Draft or Spool}°dONLNdÕ¢~Æ(´~fFromUsr: Boolean; °dONLNdË¢ÆJ)ê
  3090. {Reserved}°dONLNd˜∞~º¯(π~?pIdleProc: PrIdleProcPtr; {Pointer to the background procedure}°dONLNd;æ~ ¸*pFileName: StringPtr;°dONLNdS渠‡)~&   {Spool File Name: NIL for default.}°dONLNd~Ã~ÿÍ(’~iFileVol: Integer;°dONLNdîÃÍÿ)l °dONLNdôÃÿÊ)$${Spool File vol, set to 0 initially}°dONLNd¬⁄~Ê(„~bFileVers: SignedByte;°dONLNd›Ë~Ùz**  {Spool File version, set to 0 initially}°dONLNd ˆ~Í*bJobX: SignedByte;°dONLNd"ˆÍ)l °dONLNd'ˆJ)$
  3091. {Reserved}°dONLNd6~ñ(
  3092. ~END;
  3093. */¯4 *.¯
  3094.     .°dONLNdˇˇ('lField descriptions
  3095. ˇ·ˇ‚7^
  3096. .°dONLNd;,l8ú*iFstPage.°dONLNdD,»8:)\The page number of the fi∫İdONLNd],:8û)rrst page being printed..°dONLNdu;lGú(DliLstPage.°dONLNd~;»Gû)\0The page number of the last page being printed. .°dONLNdØJlVñ(SliCopies.°dONLNd∑J»V.)\The number of copies rë`°dONLNdÕJ.VÒ)f,equested, which is also the number of times °dONLNd˘V»bΔ(_»8your application should send the document to the printer‘İdONLNd1V≈bÛ)˝    . Howevera °dONLNd:VÛb¯)., °dONLNd<b»n‡(k»@some printer drivers handle multiple copies internally and this °dONLNd|n»z
  3097. * value will be 1..°dONLNdç}lâ¢(Ül    bJDocLoop.°dONLNdó}»âÏ)\CThe printing method that the Printing Manager will use. It will be °dONLNd⁄â»ï-* one of the following pr≠‡°dONLNdÒâ-ïB)eedefii†°dONLNdˆâCïÇ)ned constants:.°dONLNd
  3098. °Δ≠D(™ΔCONST bDraftLoop = 0;°dONLNd*°V≠∂)ê{draft printing}°dONLNdEØÍªD(∏ÍbSpoolLoop = 1;°dONLNdZØVª∂)l{spool printing}°dONLNdk«l”ú(–lfFromUsr.°dONLNdt«»”)\ Reserved by 4‡°dONLNdÄ«”)9Apple..°dONLNdá÷l‚¢(fll    pIdleProc.°dONLNdë÷»‚œ)\A∫†°dONLNdí÷œ‚-) pointer to the backgr[°dONLNd®÷.‚Q)_ound pr ‡°dONLNdØ÷R‚p)$ocedur£ °dONLNdµ÷p‚≥)e (described in ’°dONLNd≈÷≥‚fi)C
  3099. “The Idle °dONLNdœ‚»Ó—(λPrN†°dONLNd—‚“Ó)
  3100. ocedur‡°dONLNd◊‚Ó*)
  3101. e” on page 1-% °dONLNd‰‚+Ó0);8% °dONLNd‚0ÓÆ)) for this printing operation. .°dONLNdÒl˝¢(˙l    pFileName.°dONLNdÒ»˝2)\The name of the spool fi¿°dONLNd'Ò2˝Z)j
  3102. le. This fiG°dONLNd2Ò[˝¿))eld is initialized to NILfl¿°dONLNdKÒ¿˝fl)e and is °dONLNdS˝»    ¶(»1should not be changed by your application. This fi·`°dONLNdÖ˝¶    Î)field denotes the °dONLNdï    »Ô(»    default fiw‡°dONLNdü    Ü)($le name (normally 'Print File') stor1İdONLNd√    á—)óed in the printer °dONLNd’»!À(»rE°dONLNd÷Ã!‰)esourç@°dONLNd€‰!ı)ce fiS‡°dONLNd‡ˆ!)le..°dONLNd‰$l0ú(-liFileVol.°dONLNdÌ$»0)\ The volume r©†°dONLNd˘$0);eferU¿°dONLNd˝$0å)ence number of the spool fia°dONLNd$å0¥)x
  3103. le. This fi∑@°dONLNd#$¥0Õ)(eld is °dONLNd*0»<(9»initialized to 0, r‡°dONLNd=0<)Hepr†°dONLNd@0<ü)esenting the default volume. Å@°dONLNd]0ü<•)ÄYA¿°dONLNd^0•<Ê)ou can use the .°dONLNdm<»H-(E»File Manager function °dONLNdÉ<-HQ)eSetVol°dONLNdâ<QH‡)$  (described in the File Manager .°dONLNd©H»T(Q»chapter of the È °dONLNd¬HTP)?Operating SystemɆ°dONLNd“HQT⁄)J volume) to change the default °dONLNdÒT»`Ó(]»volume. .°dONLNd˙clo¢(ll    bFileVers.°dONLNdc»o`)\!The version number of the spool fi¿‡°dONLNd&c`o∞)òle, initialized to 0. .°dONLNd=rl~ä({lbJobX.°dONLNdCr»~)\ Reserved by 4‡°dONLNdOr~)9Apple.ˇ4@ˇ ˇˇˇˇ@
  3104. ˇ·ˇ‚7^
  3105. 4H\, Palatino
  3106. .+ä"CHAPTER €`)\1,     Helvetica
  3107.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3108. ~¿(‡1
  3109. ‡)-a¿)33
  3110. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3111. jHq4jHq jHj
  3112. ˇ·ˇ‚7^
  3113. °dONLNd\Hjl(fHTPrStl â°dONLNd\ljr)$  ˇˇˇˇˇˇ(f1
  3114. .°dONLNd
  3115. qä}û(zäThe ,
  3116. Courier°dONLNdqû}¬)TPrStl°dONLNdq¬}»)$ rR`°dONLNdq»}⁄)ecor$¿°dONLNdq⁄}ã)(d contains the device number of the curr˜ °dONLNdBqä})∞ent printer and the feed type .°dONLNd`}äâú(ÜäcurrذdONLNdd}úâT)+ently selected (paper cassette or manual). ›†°dONLNdè}TâÉ)∏ All other fi«‡°dONLNdõ}Ñâ°)0elds ar†°dONLNd¢}¢â≠)e r&@°dONLNd•}≠â‘)     eserved. .°dONLNdØïä°‰(ûäTPrStl = RECORD°dONLNd√£úØ+wDev: Integer;°dONLNd÷±úΩ¸*iPageV: Integer;°dONLNdÎøúÀ¸*iPageH: Integer;°dONLNdÕúŸ*bPort: SignedByte;°dONLNd€úÁ‰* feed: TFeed;°dONLNd(Èúı¥*END;
  3117. H4H
  3118.     .°dONLNdˇˇ( äField descriptions
  3119. ˇ·ˇ‚7^
  3120. .°dONLNd-ä¢*wDev.°dONLNd2Ê)\ The high-ord`°dONLNd=Î)4/der byte contains the device number of the curr†¿°dONLNdlÎ˚)—ent °dONLNdpÊ)(&Êprintero¿°dONLNdw)9) . The low-orÓ¿°dONLNdÉ9)m)5
  3121. der byte is rS‡°dONLNdên)í)5eserved..°dONLNdô,ä8Æ(5äiPageV.°dONLNd†,Ê8)\ Reserved by 4‡°dONLNd¨,8<)9Apple..°dONLNd≥;äGÆ(DäiPageH.°dONLNd∫;ÊG)\ Reserved by 4‡°dONLNdΔ;G<)9Apple..°dONLNdÕJäV®(SäbPort.°dONLNd”JÊV)\ Reserved by 4‡°dONLNdflJV<)9Apple..°dONLNdÊYäe¢(bäfeed.°dONLNdÎYÊe7)\The feed type curr䇰dONLNd˝Y7e‹)Q'ently selected.  The possible values ar· °dONLNd$Y‹e„)•e:.°dONLNd.q“}
  3122. (z“4TFeed = (feedCut,feedFanfold,feedMechCut,feedOther);
  3123. §H¨4§H´ §H§
  3124. ˇ·ˇ‚7^
  3125. .°dONLNdcñH§~(†H
  3126. TPrStatus F¿°dONLNdmñ§Ö)7  ˇˇˇˇˇˇ(†1
  3127. .°dONLNdp´ä∑û(¥äThe °dONLNdt´û∑‘)    TPrStatus°dONLNd}´‘∑⁄)6 rR`°dONLNd´⁄∑Ï)ecor$¿°dONLNdÉ´Ï∑3)d is used by the $¿°dONLNdî´3∑i)G    PrPicFile$¿°dONLNdù´i∑u)6 pr˜ °dONLNd†´t∑ë) ocedur…İdONLNd¶´ë∑ú)e (…İdONLNd©´ú∑Ω) page 1-…İdONLNd∞´Ω∑«)!50…İdONLNd≤´«∑)
  3128. ), which you use .°dONLNd√∑ä√    (¿äto print spooled documents. .°dONLNd‡œä€ˆ*TPrStatus = RECORD°dONLNd˜›úÈ+iTotPages: Integer;°dONLNd›È)r °dONLNd›È¬) {Total pages in Print File.}°dONLNd3Îú˜(ÙúiCurPage: Integer;°dONLNdIΘ)l °dONLNdMΘò){Current page number}°dONLNdg˘ú(úiTotCopies: Integer;°dONLNdǢ™)~{Total copies requested}°dONLNdüú(úiCurCopy: Integer;°dONLNdµ)l °dONLNdπò){Current copy number}°dONLNd”ú!(úiTotBands: Integer;°dONLNdÍ!)r °dONLNdÓ!V)
  3129. {Reserved}°dONLNd˝#ú/(,úiCurBand: Integer;°dONLNd#/)l °dONLNd#/V)
  3130. {Reserved}°dONLNd&1ú=(:úfPgDirty: Boolean;°dONLNd=?úK¢* °dONLNdA?“K‘)6+{True if current page has been written to.}°dONLNdqMúY(VúfImaging: Boolean;°dONLNdáMY)l °dONLNdãMYV)
  3131. {Reserved}°dONLNdö[úg¸(dúhPrint: THPrint;°dONLNd±[gÏ)~#{Handle to the active print record}°dONLNdŸiúu(rúpPrPort: TPPrPort;°dONLNdÔiu)l °dONLNdÛiu∂){Ptr to the active PrPort}°dONLNdwúɸ(ÄúhPic: PicHandle;°dONLNd)wÉŒ)~{Handle to the active Picture}°dONLNdLÖúë¥(éúEND;ˇ˙@ˇ ˇˇˇˇ@
  3132. ˇ·ˇ‚7^
  3133. 4*\˜, Palatino
  3134. .+l"CHAPTER €`)\1,     Helvetica
  3135.     (@lThe Printing Manager4⁄*˙¯
  3136. (‡*1 )-c)34
  3137.     )9    Reference
  3138. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3139. ^*m¯4^*m¯
  3140.     °dONLNdˇˇ(elField descriptions
  3141. ˇ·ˇ‚7^,
  3142. Courier
  3143. .°dONLNdjlv¢*    iTotPages.°dONLNd
  3144. j»vÓ)\CThe total number of pages being printed. This is the same value as .°dONLNdMv»Ç*
  3145. the value of °dONLNdZvÇ7)9    iLastPage°dONLNdcv7Çé)6 minus the value of °dONLNdwvéÇ )W
  3146. iFirstPage°dONLNdÅv ÇÔ)<, which °dONLNdâÇ»é“(ã»arR`°dONLNdãÇ“é¯)
  3147.     e both fr$¿°dONLNdîǯé)&om the $¿°dONLNdõÇé=)!TPrJob$¿°dONLNd°Ç=éC)$ r˜ °dONLNd£ÇBéT)ecor…İdONLNdßÇTé_)d. °dONLNd´ëlùú(öliCurPage.°dONLNd¥ë»ùq)\$The sequence number of the page currÿİdONLNdÿëqù‹)©ently being printed. For °dONLNdÒù»©s(¶»(example, if the user prints pages 10 thr≤‡°dONLNdùs©–)´ough 15 of a 20-page .°dONLNd.©»µB(≤»document, the value of the °dONLNdI©Bµr)ziCurPage°dONLNdQ©rµ{)0 fi°dONLNdT©{µ’)    eld for page 10 is 1.  °dONLNdl∏lƒ®(¡l
  3148. iTotCopies.°dONLNdw∏»ƒD)\The total number of copies rÙ°dONLNdì∏Dƒ–)|equested. This value may be dif·‡°dONLNd≤∏–ƒ‹)åferƒ`°dONLNdµ∏‹ƒÏ) ent .°dONLNdπƒ»––(Õ»frR`°dONLNdªƒ––1)om the value of the fiR`°dONLNd—ƒ1–B)aeld R`°dONLNd’ƒB–l)iCopiesR`°dONLNd‹ƒl–v)* fr$¿°dONLNdflƒv–Ö)
  3149. om $¿°dONLNd‚ƒÖ–©)TPrJob$¿°dONLNd˃©–∞)$.  °dONLNdÏ”lflú(‹liCurCopy.°dONLNdı”»fl.)\The number of the curr‡°dONLNd ”/flò)gent copy being printed. .°dONLNd$‚lÓ¢(Îl    iTotBands.°dONLNd.‚»Ó)\ Reserved by 4‡°dONLNd:‚Ó!)9Apple. .°dONLNdBÒl˝ú(˙liCurBand.°dONLNdKÒ»˝)\ Reserved by 4‡°dONLNdWÒ˝!)9Apple. .°dONLNd_l ú(    lfPgDirty.°dONLNdh» œ)\A∫†°dONLNdiœ ◊) flG`°dONLNdlÿ Ê)    =ag indicating whether the printer has begun printing the curri¿°dONLNd©Ê ˆ(    Êent °dONLNd≠ »5(»page. Set to TRUE if thern‡°dONLNdΔ 5œ)m"e has been any imaging on the curr˚@°dONLNdË œ˜)ö    ent page..°dONLNdÚl'ú($lfImaging.°dONLNd˚»'œ)\A∫†°dONLNd¸œ'◊) flG`°dONLNdˇÿ'Â)    ?ag indicating whether the printer driver is in the middle of a .°dONLNd>'»3
  3150. (0» DrawPicture°dONLNdI'
  3151. 3#)B call. °dONLNdQ6lBê(?lhPrint.°dONLNdX6»B*)\The handle to the currpİdONLNdn6*BV)b ent print r¿°dONLNdy6WBi)-ecorx °dONLNd}6iBq)d..°dONLNdÄElQñ(NlpPrPort°dONLNdàE»Qb)\#The pointer to the active printing °dONLNd´EbQí)ögrafPort°dONLNd≥EíQƒ)0  data type.°dONLNdøTl`Ñ(]lhPic.°dONLNdƒT»`N)\The handle to the active pictur5†°dONLNd„TO`Ô)á'e. This is used by the printer driver; °dONLNd
  3152. `»lg(i»&your application should not alter it. 
  3153. ë*ô¯4ë*ò¯ ë*ë˛
  3154. ˇ·ˇ‚7^
  3155. °dONLNd1É*ëS(ç*TPrPortˇˇˇˇˇˇ(çÚ1
  3156. ˇˇòÃ.°dONLNd9òl§(°lThe ˇ˛ dðdONLNd=òħ™)TPrPortˇˇòÃðdONLNdDò™§Ø)* rɯ°dONLNdFòا¡)ecorVX°dONLNdJò¡§
  3157. )d is the printing ˇ˛ dπà°dONLNd\ò
  3158. §:)IgrafPortˇˇòÃπà°dONLNddò:§˜)0), which contains a handle to a QuickDraw °dONLNdç§l∞ú(≠lgrafPort°dONLNdï§ú∞fl)0, among other fPİdONLNd§§fl∞˚)Cields. °dONLNd¨ºl»Ã(≈lTPrPort = RECORD°dONLNd¡ ~÷fi+gPort: GrafPort;°dONLNd‘ fi÷t)`{The Printer's grafPort.}°dONLNdÚÿ~‰fi(·~gProcs: QDProcs;°dONLNdÿfi‰Ï)`-{The procedures for printing in the grafPort}°dONLNd7Ê~Ú‰(Ô~lGParam1:LongInt;°dONLNdNÊÍÚ&)l
  3159. {Reserved}°dONLNd]Ù~‰(˝~lGParam2:LongInt;°dONLNdtÙÍ&)l
  3160. {Reserved}°dONLNdÉ~‰( ~lGParam3:LongInt;°dONLNdöÍ&)l
  3161. {Reserved}°dONLNd©~‰(~lGParam4:LongInt;°dONLNd¿Í&)l
  3162. {Reserved}°dONLNdœ~*fi('~fOurPtr:Boolean;°dONLNdÂÍ*&)l
  3163. {Reserved}°dONLNdÙ,~8‰(5~fOurBits:Boolean;°dONLNd ,Í8&)l
  3164. {Reserved}°dONLNd:lFÑ(ClEND;
  3165. V*e¯4V*e¯
  3166.     .°dONLNdˇˇ*Field descriptions
  3167. ˇ·ˇ‚7^
  3168. .°dONLNdcloä*gPort°dONLNd!c»o¸)\ The Printer=`°dONLNd,c˝o)5’s =`°dONLNd/co6)    grafPort=`°dONLNd7c6o9)0.°dONLNd9rl~ê({lgProcs.°dONLNd@r»~˛)\
  3169. Pointers to rq`°dONLNdMr˛~)67outines that the printer driver may have designated to °dONLNdÑ~»äL(á»take the place of QuickDraw r¸‡°dONLNd°~Lä˜)Ñ%outines. See the chapter “QuickDraw” °dONLNdΔä»ñÈ(ì»for mor Ä°dONLNdÕäÈñ*)!e information. °‡°dONLNd‹ä*ñ0)AYb`°dONLNd›ä0ñ¨)ou can include a pointer to rÃ`°dONLNd˙ä¨ñˆ)|outines that you ˇˇïT.°dONLNd ñ»¢C(ü»would like to include in the ˇ˛ø¸ˇ¯°dONLNd(ñC¢y){    grafProcsˇˇïTˇ¯°dONLNd1ñy¢Å)6 fiïL°dONLNd4ñÇ¢Æ)     eld of the ˇ˛ø¸UH°dONLNd?ñØ¢fl)-grafPortˇˇïTUH°dONLNdGñfl¢¯)0 data .°dONLNdM¢»Æ„(´»type.  °dONLNdU±lΩò(∫llGParam1°dONLNd^±»Ω)\ Reserved by 4‡°dONLNdj±Ω!)9Apple. ˇ˛@ˇ ˇˇˇˇ@
  3170. ˇ·ˇ‚7^
  3171. 4H\, Palatino
  3172. .+ä"CHAPTER €`)\1,     Helvetica
  3173.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3174. ~¿(‡1
  3175. ‡)-a¿)35
  3176. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3177. °dONLNd\äh∂(eälGParam1°dONLNd    \Êh)\ Reserved by 4‡°dONLNd\h?)9Apple. °dONLNdkäw∂(tälGParam1°dONLNd&kÊw)\ Reserved by 4‡°dONLNd2kw?)9Apple. °dONLNd:zäÜ∂(ÉälGParam1°dONLNdCzÊÜ)\ Reserved by 4‡°dONLNdOzÜ?)9Apple. °dONLNdWâäï¨(íäfOurPtr°dONLNd_âÊï)\ Reserved by 4‡°dONLNdkâï?)9Apple. °dONLNdsòä§Ø(°äfOurBits°dONLNd|òʧ)\ Reserved by 4‡°dONLNdàò§?)9Apple. 
  3178. »H–4…H– …H…
  3179. ˇ·ˇ‚7^
  3180. °dONLNdêªH…(≈H    TGnlData ≠İdONLNdôª…Ö)7  ˇˇˇˇˇˇ(≈1
  3181. .°dONLNdú–ä‹û(ŸäThe ,
  3182. Courier°dONLNd†–û‹Œ)TGnlData°dONLNd®–Œ‹‘)0 rR`°dONLNd™–‘‹Ê)ecor$¿°dONLNdÆ–Ê‹')d is the basic r˜ °dONLNdæ–&‹8)@ecor…İdONLNd¬–8‹u)d used by the …İdONLNd––u‹´)=    PrGeneral…İdONLNdŸ–´‹∑)6 prõ‡°dONLNd‹–∑‹‘) ocedurn@°dONLNd‚–‘‹fi)e. ‡°dONLNd–fi‹
  3183. )
  3184.     Although °dONLNdÓ‹äˬ(Âä
  3185. no opcode of °dONLNd˚‹¬Ë¯)8    PrGeneral°dONLNd‹¯Ë)6 uses °dONLNd
  3186. ‹Ë>)TGnlData°dONLNd‹>Ër)0
  3187. , all other rR`°dONLNd‹rËÑ)4ecor$¿°dONLNd#‹Ñ˱)
  3188. ds that ar˜ °dONLNd-‹∞Ë◊),    e used ar…İdONLNd6‹◊Ë)' e based on .°dONLNdAËäÙ†(Òäthis r˛ °dONLNdGˆÙ≤)ecorrİdONLNdKË≥Ù¿)d.  .°dONLNdPä (    äTGnlData = RECORD°dONLNdfú+iOpCode: Integer;°dONLNd|ú(¸*iError: Integer;°dONLNdë*ú6*lReserved: LongInt;°dONLNd®*6Ï)r% {more fields here depending on call}°dONLNd“8úD¥(AúEND;
  3189. SHc4THb
  3190.     .°dONLNdˇˇ([äField descriptions
  3191. ˇ·ˇ‚7^
  3192. .°dONLNd◊`äl¥*iOpCode°dONLNdfl`Êlh)\The opcode that is passed to °dONLNd¸`hlû)Ç    PrGeneral°dONLNd`ûl‡)6 to obtain the rR`°dONLNd`‡l    )B    equested °dONLNdlÊx(uÊfeaturR`°dONLNd$lx")e. Ther$¿°dONLNd+l"x3) e ar˜ °dONLNd/l2x@)e fi˜ °dONLNd3l@xú)ve possible opcodes: ˜ °dONLNdHlúx‰)\ GetRslDataOp˜ °dONLNdTl‰xÈ)H, °dONLNdVxÊÑ(ÅÊSetRslOp°dONLNd^xÑ)0, °dONLNd`xÑQ)    GetRotnOp°dONLNdixQÑV)6, °dONLNdkxVÑò) DraftBitsOp°dONLNdvxòÑ∞)B, and °dONLNd|x∞Ñ˛)
  3193. NoDraftBitsOp°dONLNdâx˛Ñ)N. °dONLNdåáäìÆ(êäiError°dONLNdìáÊì˛)\The rR`°dONLNdòá˛ì0) esult code r$¿°dONLNd§á0ìa)2 eturned by $¿°dONLNdØáaìó)1    PrGeneral$¿°dONLNd∏áóìö)6.°dONLNd∫ñ䢿(üä    lReserved.°dONLNdƒñÊ¢)\ Reserved by 4‡°dONLNd–ñ¢?)9Apple. T°dONLNd◊ñ?¢w)  Additional fi!‡°dONLNd‰ñx¢⁄)9elds may follow this fi<@°dONLNd˚ñ⁄¢Ï)beld, °dONLNd¢ÊÆÈ(´Ê:depending on the opcode used. See the descriptions of the .°dONLNd:ÆÊ∫"*
  3194. TGetRslBlk°dONLNdDÆ"∫()< (°dONLNdFÆ(∫I)page 1-°dONLNdMÆI∫S)!35°dONLNdOÆS∫\)
  3195. ), °dONLNdRÆ\∫ò)    
  3196. TSetRslBlk°dONLNd\Æò∫û)< (°dONLNd^Æû∫ø)page 1-°dONLNdeÆø∫…)!37°dONLNdgÆ…∫“)
  3197. ), °dONLNdjÆ“∫)     TDftBitsBlk°dONLNduÆ∫)B °dONLNdv∫ÊΔÍ(√Ê(°dONLNdw∫ÍΔ )page 1-°dONLNd~∫ Δ)!38°dONLNdÄ∫Δ1)
  3198. ), and °dONLNdá∫1Δs) TGetRotnBlk°dONLNdí∫sΔy)B (°dONLNdî∫yΔö)page 1-°dONLNdõ∫öΔ§)!38°dONLNdù∫§ΔÆ)
  3199. ) rR`°dONLNd†∫ÆΔ¿)
  3200. ecor$¿°dONLNd§∫¿Δœ)ds. 
  3201. ÎHÛ4ÎHÚ ÎHÎ
  3202. ˇ·ˇ‚7^
  3203. .°dONLNd©›HÎá(ÁH TGetRslBlk ø°dONLNd¥›áÎç)?  ˇˇˇˇˇˇ(Á1
  3204. ˇˇ⁄‹.°dONLNd∑Úä˛ù(˚äThe ˇˇêîZ‹°dONLNdªÚû˛⁄)
  3205. TGetRslBlkˇˇ⁄‹Z‹°dONLNd≈Ú⁄˛ˇ)<     data str¸î°dONLNdŒÚˇ˛)%ucturŒÙ°dONLNd”Ú˛;)
  3206. e is the r1˰dONLNd›Ú<˛N)'ecorH°dONLNd·ÚN˛±)d that you pass to the ˇˇêî%p°dONLNd¯Ú±˛Á)c    PrGeneralˇˇ⁄‹%p°dONLNdÚÁ˛Ú)6 pr“¨°dONLNdÚÚ˛) ocedur• °dONLNd
  3207. Ú˛)e °dONLNd ˛ä
  3208. Ÿ(äwhen you use the °dONLNd˛Ÿ
  3209. !)O GetRslDataOp°dONLNd)˛!
  3210. [)H
  3211.  opcode. The °dONLNd6˛[
  3212. ë):    PrGeneral°dONLNd?˛ë
  3213. ù)6 prR`°dONLNdB˛ù
  3214. ∫) ocedur$¿°dONLNdH˛∫
  3215. ≈)e r˜ °dONLNdK˛ƒ
  3216. Û)
  3217. eturns the .°dONLNdV
  3218. äç(ärE°dONLNdW
  3219. é†)ecorπ`°dONLNd[
  3220. †”) d with the rJ†°dONLNdg
  3221. ‘^)4 esolutions available on the currh¿°dONLNdá
  3222. ^
  3223. )ä(ent printing device. For information on .°dONLNdØä"Õ(ähow to use the °dONLNdæÕ")C GetRslDataOp°dONLNd "c)H opcode with the °dONLNd€c"ô)N    PrGeneral°dONLNd‰ô"•)6 prR`°dONLNdÁ•"¬) ocedur$¿°dONLNd̬"‹)e, see .°dONLNdÙ"ä.<(+ä'“Determining the Resolution of the CurrA@°dONLNd"=.°)≥ent Printer” on page 1-»‡°dONLNd2"°.´)d17»‡°dONLNd4"´.∞)
  3224. . °dONLNd74ä@(=äIf the printer uses discr~°dONLNdP4@m)fete printing, the number of rÈİdONLNdm4m@ˇ)}"esolution values available on the .°dONLNdè@äL(Iäprinter is listed in the °dONLNd®@L,)f
  3225. iRslRecCnt°dONLNd≤@,L5)< fi°dONLNdµ@5Lo)    
  3226. eld and the rR`°dONLNd¬@oLÅ):ecor$¿°dONLNdΔ@ÅL)ds containing those values ar˜ °dONLNd„@L)Åe in °dONLNdËLäXú(Uäthe °dONLNdÏLúXÃ)rgRslRec°dONLNdÙLÃXË)0 arrayd@°dONLNd˙LÁXº). If the printer supports variable printing, the r6†°dONLNd,LºX)’esolution ranges in °dONLNd@Xäd∏(aä
  3227. the X and R`°dONLNdJX∏dø).Y$¿°dONLNdKXødœ) dir˜ °dONLNdOXŒd˘)
  3228. ections ar…İdONLNdYX˘d)+    e in the …İdONLNdbXdA)$xRslRg…İdONLNdhXAdV)$ and …İdONLNdmXVdz)yRslRg…İdONLNdsXzdÉ)$ fi…İdONLNdvXÉdõ)    elds. ˇ˙@ˇ ˇˇˇˇ@
  3229. ˇ·ˇ‚7^
  3230. 4*\˜, Palatino
  3231. .+l"CHAPTER €`)\1,     Helvetica
  3232.     (@lThe Printing Manager4⁄*˙¯
  3233. (‡*1 )-c)36
  3234.     )9    Reference
  3235. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3236. Courier
  3237. .°dONLNd\lhfi(elTGetRslBlk = RECORD°dONLNdj~v‰+iOpCode: Integer;°dONLNd0j¸vº)~ {The opcode passed to PrGeneral}°dONLNdUx~Ñfi(Å~iError: Integer;°dONLNdlx¸ÑÊ)~'{The result code returned by PrGeneral}°dONLNdòÜ~í(è~lReserved: LongInt;°dONLNd≤ܸín)~{Reserved by Apple}°dONLNd î~†‰(ù~iRgType: Integer;°dONLNd‚Œ)~#{The printer driver version number}°dONLNd
  3238. ¢~Æÿ(´~xRslRg: TRslRg;°dONLNd ¢¸Æ»)~"{The X-direction resolution range}°dONLNdG∞~ºÿ(π~yRslRg: TRslRg;°dONLNd]∞¸º»)~"{The Y-direction resolution range}°dONLNdÑæ~ ˆ(«~iRslRecCnt: Integer;°dONLNdü渠»)~"{The number of resolution records}°dONLNdΔÃ~ÿV(’~$rgRslRec: ARRAY [1..27] OF TRslRec; °dONLNdˆ⁄¸Ê¬+~!{The array of resolution records}°dONLNdË~Ùñ(Ò~END;
  3239. *¯4*¯
  3240.     .°dONLNdˇˇ( lField descriptions
  3241. ˇ·ˇ‚7^
  3242. .°dONLNd!lñ*iOpCode°dONLNd)»;)\The opcode passed to the °dONLNdB;q)s    PrGeneral°dONLNdKq})6 prR`°dONLNdN}ö) ocedur$¿°dONLNdTö›)e to obtain the °dONLNdd»(Ã(%»rR`°dONLNdeÃ()equested featur$¿°dONLNdt(j)Ee. In the case of the $¿°dONLNdäj(¶)Y
  3243. TGetRslBlk$¿°dONLNdî¶(¨)< r˜ °dONLNdñ´(Ω)ecor…İdONLNdöΩ(⁄)d, the °dONLNd°(»4Û(1»
  3244. opcode is °dONLNd´(Û4;)+ GetRslDataOp°dONLNd∑(;4@)H. °dONLNd∫7lCê(@liError°dONLNd¡7»C‡)\The rR`°dONLNdΔ7‡C) esult code r$¿°dONLNd“7CC)2 eturned by $¿°dONLNd›7CCy)1    PrGeneral$¿°dONLNdÊ7yC|)6.°dONLNdËFlR¢(Ol    lReserved.°dONLNdÚF»R)\ Reserved by 4‡°dONLNd˛FR!)9Apple. .°dONLNdUlañ(^liRgType.°dONLNdU»a')\The version number r?‡°dONLNd"U(aß)`eturned by the printer driver9İdONLNd?Ußa·) . The LaserWǰdONLNdKU‡aı)9riter °dONLNdQa»m(j»
  3245. and ImageWª°dONLNd[am`)8riter printers always rœ@°dONLNdra`m¶)`eturn 1. If this fi†°dONLNdÖaßmı)Geld is not 1, don’t °dONLNdôm»y!(v»use the data in this r °dONLNdØm"y4)ZecoruİdONLNd≥m4yA)d.  .°dONLNd∏|làê(ÖlxRslRg.°dONLNdø|»àfl)\The rÄ¿°dONLNdƒ|flàå)'esolution range supported for the X dira°dONLNdÎ|åà◊)≠ection. If the currÀ@°dONLNd˛|◊àÁ)Kent °dONLNdà»î`(ë»#printer does not support variable rA°dONLNd%àaî–)ôesolution, this value is 0. .°dONLNdBól£ê(†lyRslRg.°dONLNdIó»£fl)\The rÄ¿°dONLNdNófl£u)"esolution range supported for the >¿°dONLNdpóv£|)óYº†°dONLNdqó|£ã) dir¿°dONLNduóå£◊)ection. If the currp°dONLNdàó◊£Á)Kent °dONLNd壻Ø`(¨»#printer does not support variable rA°dONLNdØ£aØ–)ôesolution, this value is 0. .°dONLNdÃ≤læ®(ªl
  3246. iRslRecCnt.°dONLNd◊≤»æ)\The number of r:İdONLNdÊ≤æ?)H esolution r\¿°dONLNdÒ≤?æQ)/ecor— °dONLNdı≤QæŸ) ds used by a particular printer °dONLNdæ» „(«»driver‡°dONLNdæ„ ) , up to 27..°dONLNd'ÕlŸú(÷lrgRslRec.°dONLNd0Õ»Ÿ)\
  3247. An array of rõ`°dONLNd=ÕŸ0)9 esolution rΩ†°dONLNdHÕ0ŸB)/ecor2°dONLNdLÕCŸ∂)ds, each specifying a discr†°dONLNdgÕ∂Ÿ…)sete r4@°dONLNdlÕ…ŸÙ)
  3248. esolution °dONLNdvŸ»Â(‚»at which the curr° °dONLNdáŸÂú)K ent printer can print an image. .°dONLNd®Îl˜Ä(ÙlThe °dONLNd¨Îʧ)xRslRg°dONLNd≤Χ˜π)$ and °dONLNd∑Îπ˜›)yRslRg°dONLNdΩΛ˜Ê)$ fi°dONLNd¿Îʘ)     elds of the °dONLNdÃΘT)2
  3249. TGetRslBlk°dONLNd÷ÎT˜Z)< rR`°dONLNdÿÎZ˜l)ecor$¿°dONLNd‹Îl˜~)d ar˜ °dONLNd‡Î}˜¶)
  3250. e of type ˜ °dONLNdÍζ˜ ))TRslRg˜ °dONLNdΠ˜Ê)$. This .°dONLNd˜˜lç(ldata strº °dONLNdˇ˜ç§)!ucturB°dONLNd˜•Z)$e contains the minimum and maximum rD¿°dONLNd(˜Z◊)µesolutions supported by the °dONLNdDl~( lcurrذdONLNdH~ )ent printer driver’`°dONLNdZ ˙)L
  3251. . If the currî °dONLNdg˚§)1'ent printer does not support variable r≤İdONLNdé§Ë)©esolution, both °dONLNdûlr(lfiå¿°dONLNd†r∏)elds of this subr™¿°dONLNd±∏ )Fecor °dONLNdµÀ‹)d ar‡°dONLNdπ‹Í)e 0..°dONLNdæ'l3Δ(0lTRslRg = RECORD°dONLNd“5~A“+iMin: Integer;°dONLNdÊ5ÍA∂)l"{The minimum resolution supported}°dONLNd
  3252. C~O“(L~iMax: Integer;°dONLNd!CÍO∂)l"{The maximum resolution supported}°dONLNdHQ~]ñ(Z~END;
  3253. m*|¯4m*|¯
  3254.     .°dONLNdˇˇ(tlField descriptions
  3255. ˇ·ˇ‚7^
  3256. .°dONLNdMzlÜÑ*iMin.°dONLNdRz»Ü
  3257. )\
  3258. The minimum r&°dONLNd_zÜö)Fesolution supported by the curr˛†°dONLNd~zôÜ»)ã ent printerK¿°dONLNdâz»ÜÊ)/    . If the °dONLNdíÜ»í>(è»printer supports only discr¿°dONLNd≠Ü?íR)wete r,`°dONLNd≤ÜRí¬)esolutions, this value is 0..°dONLNdœïl°Ñ(ûliMax.°dONLNd‘ï»°)\
  3259. The maximum rdONLNd·ï°õ)Gesolution supported by the currmİdONLNdïõ° )å ent printer∫†°dONLNd ï…°Á).    . If the °dONLNd°»≠>(™»printer supports only discr¿°dONLNd/°?≠R)wete r,`°dONLNd4°R≠¬)esolutions, this value is 0.ˇÆ@ˇ ˇˇˇˇ@
  3260. ˇ·ˇ‚7^
  3261. 4H\, Palatino
  3262. .+ä"CHAPTER €`)\1,     Helvetica
  3263.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3264. ~¿(‡1
  3265. ‡)-a¿)37
  3266. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3267. .°dONLNd\ähû(eäThe ,
  3268. Courier°dONLNd\ûhŒ)rgRslRec°dONLNd \Œh◊)0 fi°dONLNd\◊h)     eld of the °dONLNd\hA).
  3269. TGetRslBlk°dONLNd$\AhG)< rR`°dONLNd&\GhY)ecor$¿°dONLNd*\Yhk)d ar˜ °dONLNd.\jhì)
  3270. e of type ˜ °dONLNd8\ìhΩ))TRslRec˜ °dONLNd?\Ωh÷)*. The ˜ °dONLNdE\÷h)TRslRec˜ °dONLNdL\h)* .°dONLNdMhätù(qäsubr¿°dONLNdQhût∞)ecorÖ °dONLNdUh∞t’)d specifiè°dONLNd^h’t˝)%
  3271. es a discr °dONLNdhh˛t))ete r&†°dONLNdmht©)"esolution supported by the printer¿°dONLNdèh®t≠)ó. a†°dONLNdëh≠t¥)Aú@°dONLNdíh¥t) printer driver can .°dONLNd¶täÄÚ(}ähave up to 27 separate °dONLNdΩtÚÄ)hTRslRec°dONLNdƒtÄ")* rR`°dONLNdΔt"Ä4)ecor$¿°dONLNd t4ÄÇ)ds. (The ImageWg`°dONLNdŸtÅÄ)M riter printer driver contains 4 .°dONLNd˘Ääå§(âäsuch rJ¿°dONLNdˇÄ•å∑)ecorø °dONLNdÄ∑å«)ds.).°dONLNdòä§Í(°äTRslRec = RECORD°dONLNd¶ú≤ˆ+iXRsl: Integer;°dONLNd2¶≤‘)l"{Discrete resolution, X-direction}°dONLNdY¥ú¿ˆ(ΩúiYRsl: Integer;°dONLNdn¥¿‘)l"{Discrete resolution, Y-direction}°dONLNdï¬úŒ¥(ÀúEND;
  3272. ›HÌ4fiHÏ
  3273.     .°dONLNdˇˇ(ÂäField descriptions
  3274. ˇ·ˇ‚7^
  3275. .°dONLNdöÍ䈮*iXRsl.°dONLNd†Íʈ)\    The discr2 °dONLNd©Íˆ"))ete rL¿°dONLNdÆÍ"ˆØ) esolution supported in the X diré°dONLNdŒÍ؈Œ)çection. .°dONLNd◊˘ä®(äiYRsl.°dONLNd›˘Ê)\    The discr2 °dONLNdÊ˘"))ete rL¿°dONLNd΢"ô)esolution supported in the k¿°dONLNd˘ôü)wYȆ°dONLNd˘üÆ) dir2¿°dONLNd ˘ØŒ)ection. 
  3276. *H24*H1 *H*
  3277. ˇ·ˇ‚7^
  3278. °dONLNdH*Ñ(&H TSetRslBlk „¿°dONLNdÑ*á)< ˇˇˇˇˇˇ(&1
  3279. ˇˇ⁄‹.°dONLNd!1ä=ù(:äThe ˇˇêîZ‹°dONLNd%1û=⁄)
  3280. TSetRslBlkˇˇ⁄‹Z‹°dONLNd/1⁄=ˇ)<     data str¸î°dONLNd81ˇ=)%ucturŒÙ°dONLNd=1=;)
  3281. e is the r1˰dONLNdG1<=N)'ecorH°dONLNdK1N=±)d that you pass to the ˇˇêî%p°dONLNdb1±=Á)c    PrGeneralˇˇ⁄‹%p°dONLNdk1Á=Ú)6 pr“¨°dONLNdn1Ú=) ocedur• °dONLNdt1=)e °dONLNdv=äIŸ(Fäwhen you use the °dONLNdá=ŸI    )OSetRslOp°dONLNdè=    Iv)0 opcode. It contains the rR`°dONLNd©=vI)m#esolutions that you want to use on °dONLNdÃIäU≠(Räthe currR`°dONLNd‘I≠Uü)#7ent printing device. For information on how to use the R`°dONLNd IüUœ)ÚSetRslOpR`°dONLNdIœU )0
  3282.  opcode with °dONLNd Uäaú(^äthe °dONLNd$Uúa“)    PrGeneral°dONLNd-U“afi)6 prR`°dONLNd0Ufia˚) ocedur$¿°dONLNd6U˚a)e, see $¿°dONLNd=Ua )'“Determining the Resolution of the Curr˜ °dONLNddU…a )¥ent Printer” on .°dONLNdtaäm™(jäpage 1-Æ¿°dONLNd{a™m¥) 17Æ¿°dONLNd}a¥mπ)
  3283. . .°dONLNdÄyäÖ¸(ÇäTSetRslBlk = RECORD°dONLNdòáúì+iOpCode: Integer;°dONLNd∞áì⁄)~ {The opcode passed to PrGeneral}°dONLNd’ïú°¸(ûúiError: Integer;°dONLNdÏï°)~'{The result code returned by PrGeneral}°dONLNd£úØ(¨úlReserved: LongInt;°dONLNd2£Øå)~{Reserved by Apple}°dONLNdJ±úΩ¸(∫úhPrint: THPrint;°dONLNda±ΩÊ)~"{A handle to current print record}°dONLNdàøúÀˆ(»úiXRsl: Integer;°dONLNdûøÀ¯)~%{The X-direction resolution you want}°dONLNd»ÕúŸˆ(÷úiYRsl: Integer;°dONLNdfiÕŸ¯)~%{The Y-direction resolution you want}°dONLNd€úÁ¥(‰úEND;
  3284. ˜H4˜H
  3285.     .°dONLNdˇˇ(˛äField descriptions
  3286. ˇ·ˇ‚7^
  3287. .°dONLNd
  3288. ä¥*iOpCode°dONLNdÊG)\The opcode passed to °dONLNd*G})a    PrGeneral°dONLNd3}ø)6 to obtain the rR`°dONLNdCø)Bequested featur$¿°dONLNdR)Ee. °dONLNdUÊ5(ÊIn the case of the °dONLNdh5q)O
  3289. TSetRslBlk°dONLNdrqw)< rR`°dONLNdtwâ)ecor$¿°dONLNdxâ—)d, the opcode is $¿°dONLNdâ—)HSetRslOp$¿°dONLNdë)0. °dONLNdîä+Æ((äiError°dONLNdõÊ+˛)\The rR`°dONLNd†˛+0) esult code r$¿°dONLNd¨0+a)2 eturned by $¿°dONLNd∑a+ó)1    PrGeneral$¿°dONLNd¿ó+ö)6.°dONLNd¬.ä:¿(7ä    lReserved.°dONLNdÃ.Ê:)\ Reserved by 4‡°dONLNdÿ.:?)9Apple. °dONLNd‡=äI•(FähPrint°dONLNdÁ=ÊIÌ)\A∫†°dONLNdË=ÌIH) handle to the print rˆ@°dONLNd˛=HIZ)[ecorj†°dONLNd=[If)d. X¿°dONLNd=fIl) Y@°dONLNd=lIˆ)our application should have alrΩ °dONLNd%=ˆI
  3290. )äeady °dONLNd*IÊUÓ(RÊcrµ@°dONLNd,IÓU7)eated this print r†°dONLNd>I8UJ)Jecorä°dONLNdBIJUú)d and passed it thr˜‡°dONLNdUIúUˇ)Rough the PrintDefault °dONLNdkUÊaÔ(^ÊprG °dONLNdmUa)
  3291. ocedurfi`°dONLNdsUaI)
  3292. e to make sur¿°dONLNdÄUJa )</e that all of the information in the handle is °dONLNdØaÊm(jÊgood. °dONLNd∂pä|°(yäiXRsl°dONLNdºpÊ|˝)\The rÄ¿°dONLNd¡p˝|Z)esolution in the X diri¿°dONLNd◊pZ|)](ection that you want the printer to use °dONLNdˇ|Êà*(ÖÊwhen printing. °dONLNdãäó°(îäiYRsl°dONLNdãÊó˝)\The rÄ¿°dONLNdã˝óC)esolution in the GİdONLNd+ãDóJ)GY≈`°dONLNd,ãJóY) dirİdONLNd0ãZó)(ection that you want the printer to use °dONLNdXóÊ£*(†Êwhen printing. ˇí@ˇ ˇˇˇˇ@
  3293. ˇ·ˇ‚7^
  3294. 4*\˜, Palatino
  3295. .+l"CHAPTER €`)\1,     Helvetica
  3296.     (@lThe Printing Manager4⁄*˙¯
  3297. (‡*1 )-c)38
  3298.     )9    Reference
  3299. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3300. .°dONLNd\lhà(elIf the ,
  3301. Courier°dONLNd\àh¨)iError°dONLNd
  3302. \¨hµ)$ fi°dONLNd\µh )    eld rR`°dONLNd\ hÁ)eturns R`°dONLNd\Áh)noErrï°dONLNd!\h¡)*, the Printing Manager updates the print rg`°dONLNdK\¡h”)Ωecor9¿°dONLNdO\”hÙ)d with °dONLNdVhltÖ(qlthis rR`°dONLNd\hÖtv)8esolution, which the printer uses at print time. If the R`°dONLNdîhvtö)ÒiErrorR`°dONLNdöhöt£)$ fiR`°dONLNdùh£t∏)    eld r$¿°dONLNd¢h∏t’)eturns °dONLNd©tlÄ¢(}l    noSuchRsl°dONLNd≤t¢Ä )6
  3303. , the currR`°dONLNdºt ÄX)(!ent printer doesn’t support the r$¿°dONLNd›tXÄÖ)é
  3304. equested r˜ °dONLNdÁtÑĈ),esolution and the printer .°dONLNdÄlå(âl$driver does not change the setting. 
  3305. ∞*∏¯4±*∏¯ ±*±˛
  3306. ˇ·ˇ‚7^
  3307. °dONLNd&£*±j(≠* TDftBitsBlk Z°dONLNd2£k±n)A ˇˇˇˇˇˇ(≠Ú1
  3308. .°dONLNd4∏lƒÄ(¡lThe °dONLNd8∏ă¬) TDftBitsBlk°dONLNdC∏¬ƒ»)B rR`°dONLNdE∏»ƒ⁄)ecor$¿°dONLNdI∏⁄ƒ")d is the data str¿°dONLNdZ∏"ƒ8)Huctur„ °dONLNd_∏7ƒ^)
  3309. e is the rµÄ°dONLNdi∏^ƒp)'ecorᇰdONLNdm∏pƒ‘)d that you pass to the °dONLNdуl–¢(Õl    PrGeneral°dONLNd烢–Æ)6 prR`°dONLNdêƒÆ–À) ocedur$¿°dONLNdñƒÀ–!)e when you use the $¿°dONLNd©ƒ!–c)V DraftBitsOp$¿°dONLNd¥ƒc–fi)B opcode. For information on °dONLNd––l‹Ø(Ÿlhow to use the °dONLNdfl–Ø‹Ò)C DraftBitsOp°dONLNdÍ–Ò‹?)B opcode with the °dONLNd˚–?‹u)N    PrGeneral°dONLNd–u‹Å)6 prR`°dONLNd–Å‹û) ocedur$¿°dONLNd
  3310. –û‹∏)e, see $¿°dONLNd–∏‹È)
  3311. “Choosing .°dONLNd‹lË(Âl"Draft-Quality Printing” on page 1-÷ °dONLNd@‹Ë)ò21÷ °dONLNdB‹Ë)
  3312. . .°dONLNdEÙl‰(˝lTDftBitsBlk = RECORD°dONLNd^~‰+iOpCode: Integer;°dONLNdv¸º)~ {The opcode passed to PrGeneral}°dONLNdõ~fi(~iError: Integer;°dONLNd≤¸Ê)~'{The result code returned by PrGeneral}°dONLNdfi~*('~lReserved: LongInt;°dONLNd¯¸*n)~{Reserved by Apple}°dONLNd,~8fi(5~hPrint: THPrint;°dONLNd',¸8»)~"{A handle to current print record}°dONLNdN:~Fñ(C~END;
  3313. U*e¯4V*d¯
  3314.     .°dONLNdˇˇ(]lField descriptions
  3315. ˇ·ˇ‚7^
  3316. .°dONLNdSblnñ*iOpCode°dONLNd[b»n;)\The opcode passed to the °dONLNdtb;nq)s    PrGeneral°dONLNd}bqn})6 prR`°dONLNdÄb}nö) ocedur$¿°dONLNdÜbön›)e to obtain the °dONLNdñn»zÃ(w»rR`°dONLNdónÃz)equested featur$¿°dONLNd¶nzj)Ee. In the case of the $¿°dONLNdºnjz¨)Y TDftBitsBlk$¿°dONLNd«n¨z≤)B r˜ °dONLNd…n±z√)ecor…İdONLNdÕn√z‡)d, the °dONLNd‘z»ÜÛ(É»
  3317. opcode is °dONLNdfizÛÜ5)+ DraftBitsOp°dONLNdÈz5Ü:)B. °dONLNdÏâlïê(íliError°dONLNdÛâ»ï‡)\The rR`°dONLNd¯â‡ï) esult code r$¿°dONLNdâïU)2eturned by the $¿°dONLNdâUïã)C    PrGeneral$¿°dONLNdâãïó)6 pr˜ °dONLNdâñï≥) ocedur…İdONLNd%â≥ïª)e.°dONLNd(òl§¢(°l    lReserved.°dONLNd2ò»§)\ Reserved by 4‡°dONLNd>ò§!)9Apple. °dONLNdFßl≥á(∞lhPrint°dONLNdMß»≥œ)\A∫†°dONLNdNßœ≥*) handle to the print rˆ@°dONLNddß*≥<)[ecorj†°dONLNdhß=≥H)d. X¿°dONLNdkßH≥N) Y@°dONLNdlßN≥ÿ)our application should have alrΩ °dONLNdãßÿ≥Ô)äeady °dONLNdê≥»ø–(º»crµ@°dONLNdí≥–ø)eated this print r†°dONLNd§≥ø,)Jecorä°dONLNd®≥,ø~)d and passed it thr˜‡°dONLNdª≥~ø·)Rough the PrintDefault °dONLNd—ø»À—(»»prG °dONLNd”ø“À)
  3318. ocedurfi`°dONLNdŸøÀ+)
  3319. e to make sur¿°dONLNdÊø,ÀÌ)</e that all of the information in the handle is °dONLNdÀ»◊„(‘»good. 
  3320. ¸*¯4¸*¯ ¸*¸˛
  3321. ˇ·ˇ‚7^
  3322. °dONLNdÓ*¸r(¯* TGetRotnBlk ù@°dONLNd(Ór¸x)H  ˇˇˇˇˇˇ(¯Ú1
  3323. .°dONLNd+lÄ( lThe °dONLNd/Ĭ) TGetRotnBlk°dONLNd:¬»)B rR`°dONLNd<»⁄)ecor$¿°dONLNd@⁄")d is the data str¿°dONLNdQ"8)Huctur„ °dONLNdV7^)
  3324. e is the rµÄ°dONLNd`^p)'ecorᇰdONLNddp‘)d that you pass to the °dONLNd{l¢(l    PrGeneral°dONLNdÑ¢Æ)6 prR`°dONLNdáÆÀ) ocedur$¿°dONLNdçÀ!)e when you use the $¿°dONLNd†!W)V    GetRotnOp$¿°dONLNd©W})6     opcode. $¿°dONLNd≤}≥)&    PrGeneral$¿°dONLNdª≥π)6 r˜ °dONLNdΩ∏fl)
  3325. eturns it .°dONLNd«l'≈($lOwith a Boolean variable that tells you whether the user has selected landscape .°dONLNd'l3<* /orientation. For information on how to use the °dONLNdE'<3r)–    GetRotnOp°dONLNdN'r3¿)6 opcode with the °dONLNd_'¿3ˆ)N    PrGeneral°dONLNdh'ˆ3¯)6 .°dONLNdi3l?u(<lprG °dONLNdk3v?î)
  3326. ocedurfi`°dONLNdq3î?Æ)e, see ¯@°dONLNdx3Æ?n))“Determining Page Orientation” on page 1-2@°dONLNd°3o?y)¡202@°dONLNd£3y?~)
  3327. . .°dONLNd¶KlW‰(TlTGetRotnBlk = RECORD°dONLNdøY~e‰+iOpCode: Integer;°dONLNd◊Y¸eº)~ {The opcode passed to PrGeneral}°dONLNd¸g~sfi(p~iError: Integer;°dONLNdg¸sÊ)~'{The result code returned by PrGeneral}°dONLNd?u~Å(~~lReserved: LongInt;°dONLNdYu¸Ån)~{Reserved by Apple}°dONLNdqÉ~èfi(å~hPrint: THPrint;°dONLNdàɸè»)~"{A handle to current print record}°dONLNdØë~ùˆ(ö~fLandscape: Boolean;°dONLNd ë¸ù‡)~&{If the user wants landscape printing}°dONLNdıü~´Í(®~bXtra: SignedByte;°dONLNdü¸´n)~{Reserved by Apple}°dONLNd&≠~πñ(∂~END;ˇn@ˇ ˇˇˇˇ@
  3328. ˇ·ˇ‚7^
  3329. 4H\, Palatino
  3330. .+ä"CHAPTER €`)\1,     Helvetica
  3331.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3332. ~¿(‡1
  3333. ‡)-a¿)39
  3334. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3335. ^Hm4^Hm
  3336.     °dONLNdˇˇ(eäField descriptions
  3337. ˇ·ˇ‚7^,
  3338. Courier
  3339. .°dONLNdjäv¥*iOpCode°dONLNdjÊvY)\The opcode passed to the °dONLNd!jYvè)s    PrGeneral°dONLNd*jèvõ)6 prR`°dONLNd-jõv∏) ocedur$¿°dONLNd3j∏v˚)e to obtain the °dONLNdCvÊÇÍ(ÊrR`°dONLNdDvÍÇ/)equested featur$¿°dONLNdSv/Çà)Ee. In the case of the $¿°dONLNdivàÇ )Y TGetRotnBlk$¿°dONLNdtv Ç–)B r˜ °dONLNdvvœÇ·)ecor…İdONLNdzv·Ç˛)d, the °dONLNdÅÇÊé(ãÊ
  3340. opcode is °dONLNdãÇéG)+    GetRotnOp°dONLNdîÇGéL)6. °dONLNdóëäùÆ(öäiError°dONLNdûëÊù˛)\The rR`°dONLNd£ë˛ù0) esult code r$¿°dONLNdØë0ùs)2eturned by the $¿°dONLNdæësù©)C    PrGeneral$¿°dONLNd«ë©ùµ)6 pr˜ °dONLNd ë¥ù—) ocedur…İdONLNd–ë—ùŸ)e.°dONLNd”†ä¨¿(©ä    lReserved.°dONLNd›†Ê¨)\ Reserved by 4‡°dONLNdȆ¨?)9Apple. °dONLNdÒØäª•(∏ähPrint°dONLNd¯ØÊªÌ)\A∫†°dONLNd˘ØÌªH) handle to the print rˆ@°dONLNdØHªZ)[ecorj†°dONLNdØ[ªf)d. X¿°dONLNdØfªl) Y@°dONLNdØlªˆ)our application should have alrΩ °dONLNd6؈ª
  3341. )äeady °dONLNd;ªÊ«Ó(ƒÊcrµ@°dONLNd=ªÓ«7)eated this print r†°dONLNdOª8«J)Jecorä°dONLNdSªJ«ú)d and passed it thr˜‡°dONLNdfªú«ˇ)Rough the PrintDefault °dONLNd|«Ê”Ô(–ÊprG °dONLNd~«”)
  3342. ocedurfi`°dONLNdÑ«”I)
  3343. e to make sur¿°dONLNdë«J” )</e that all of the information in the handle is °dONLNd¿”Êfl(‹Êgood. .°dONLNd«‚äÓΔ(Îä
  3344. fLandscape.°dONLNd“‚ÊÓÌ)\A∫†°dONLNd”‚ÌÓ)@ Boolean variable that determines whether the user has selected °dONLNdÓÊ˙Æ(˜Ê/landscape orientation in the style dialog box. ~ °dONLNdBÓÆ˙µ)»A∏¿°dONLNdCÓµ˙˙) value of TRUE °dONLNdR˙Êœ(Ê6indicates the user has selected landscape orientation..°dONLNdâ    ä®(äbXtra.°dONLNdè    Ê)\ Reserved by 4‡°dONLNdõ    ?)9Apple. 
  3345. :HB4:HA :H:
  3346. ˇ·ˇ‚7^
  3347. °dONLNd£,H:q(6HTPrDlg HİdONLNd™,r:u)* ˇˇˇˇˇˇ(61
  3348. .°dONLNd¨AäMû(JäThe °dONLNd∞AûM¬)TPrDlg°dONLNd∂A¬M»)$ rR`°dONLNd∏A»M⁄)ecor$¿°dONLNdºA⁄Mˇ)Dd contains the information needed to set up either the style or job °dONLNdMäY“(Vädialog box. The °dONLNdM“Y)H    PrStlInit°dONLNdMY)6 and °dONLNdMYS)    PrJobInit°dONLNd'MSY)6  function rR`°dONLNd2MY±), eturn this r$¿°dONLNd>M±Y√)2ecor˜ °dONLNdBM¬Y
  3349. )d, set up for the .°dONLNdTYäe(bästyle and job dialog boxes r‰°dONLNdpYe3)x espectively°dONLNd{Y3e8)1. Ô`°dONLNd}Y7e=)Y؇°dONLNd~Y=eb)ou can fiz‡°dONLNdáYce)&%nd information on how to customize a °dONLNd¨eäqÌ(näprinting dialog box in ä`°dONLNd√eÌq≈)c1“Altering the Style or Job Dialog Box” on page 1-ù`°dONLNdÙe≈qœ)ÿ23ù`°dONLNdˆeœq÷)
  3350. .  .°dONLNd˙}äâ‰(ÜäTPrDlg = RECORD°dONLNdãúó¥+Dlg:°dONLNdã‰ó2)H
  3351. DialogRecord;°dONLNd'ã2ó8)N °dONLNd+ãbóÏ)0{Ptr to the dialog box}°dONLNdGôú•ÿ(¢ú
  3352. pFltrProc:°dONLNdUô‰•V)HModalFilterProcPtr;°dONLNdoôb•¯)~{The dialog event filter}°dONLNdçßú≥ÿ(∞ú
  3353. pItemProc:°dONLNdõ߉≥2)H
  3354. PItemProcPtr;°dONLNdØßb≥)~{The Item evaluating proc.}°dONLNdœµú¡ÿ(æú
  3355. hPrintUsr:°dONLNd›µ‰¡)HTHPrint;°dONLNdϵb¡Œ)~{The print record}°dONLNd√úœ¿(ÃúfDoIt:°dONLNd
  3356. √‰œ)HBoolean;°dONLNd√bœÊ)~{Dialog box confirmed}°dONLNd7—ú›¿(⁄úfDone:°dONLNdA—‰›)HBoolean;°dONLNdP—b›)~{User’s interaction completed}°dONLNdsflúÎΔ(ËúlUser1:°dONLNd~fl‰Î)HLongInt;°dONLNdçflbÎ)~{Storage for your application}°dONLNd∞Ìú˘Δ(ˆúlUser2:°dONLNdª̉˘)HLongInt;°dONLNd Ìb˘)~{Storage for your application}°dONLNdÌ˚úΔ(úlUser3:°dONLNd¯˚‰)HLongInt;°dONLNd˚b)~{Storage for your application}°dONLNd*    úΔ(úlUser4:°dONLNd5    ‰)HLongInt;°dONLNdD    b)~{Storage for your application}°dONLNdgú#¥( úEND;
  3357. 3HB43HB
  3358.     .°dONLNdˇˇ(:äField descriptions
  3359. ˇ·ˇ‚7^
  3360. .°dONLNdl@äLú*Dlg.°dONLNdp@ÊLÌ)\A∫†°dONLNdq@ÌL)A pointer to the dialog box, which may be either the style or job °dONLNd≤LÊX(UÊ dialog box. .°dONLNdø[äg¿(dä    pFltrProc.°dONLNd…[ÊgÌ)\A∫†°dONLNd [Ìgm) pointer to the dialog event fiÀ°dONLNdÈ[mg{)ÄlterÙ†°dONLNdÌ[{gÄ). .°dONLNdjäv¿(sä    pItemProc.°dONLNd˙jÊvÌ)\A∫†°dONLNd˚jÌv1) pointer to the rD‡°dONLNd j2v)E1outine that handles the items of the dialog box, °dONLNd=vÊÇq(Êalso known as the dialog hook. .°dONLNd]Öäë¿(éä    hPrintUsr.°dONLNdgÖÊëK)\The document’s print r/‡°dONLNd}ÖLë^)fecor§@°dONLNdÅÖ^ëf)d..°dONLNdÑî䆮(ùäfDoIt.°dONLNdäîʆ\)\Whether the user has confiõ°dONLNd§î\†)v$rmed the dialog box. TRUE means the °dONLNd»†Ê¨"(©Ê
  3361. user has confiR†°dONLNd÷†#¨î)=rmed it by clicking “OK”.ˇV@ˇ ˇˇˇˇ@
  3362. ˇ·ˇ‚7^
  3363. 4*\˜, Palatino
  3364. .+l"CHAPTER €`)\1,     Helvetica
  3365.     (@lThe Printing Manager4⁄*˙¯
  3366. (‡*1 )-c)40
  3367.     )9    Reference
  3368. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3369. Courier
  3370. .°dONLNd\lhä(elfDone.°dONLNd\»h)\Whether the userÜ °dONLNd\h)M1’s interaction is completed. TRUE means the user °dONLNdGh»tk(q»%has clicked either “OK” or “Cancel”. .°dONLNdmwlÉê(ÄllUser1.°dONLNdtw»ÉÏ)\    In this fiı¿°dONLNd~wÏÉS)$eld and the following fiJ@°dONLNdñwTÉŸ)helds, your application can storÖ¿°dONLNdµwŸÉÛ)Öe any °dONLNdªÉ»è‰(å»Bkind of data you wish for the dialog box, such as global storage. .°dONLNd˛ílûê(õllUser2°dONLNdí»û⁄)\See °dONLNd    í⁄û˛)lUser1°dONLNdí˛û)$.°dONLNd°l≠ê(™llUser3°dONLNd°»≠⁄)\See °dONLNd°⁄≠˛)lUser1°dONLNd"°˛≠)$.°dONLNd$∞lºê(πllUser4°dONLNd+∞»º⁄)\See °dONLNd/∞⁄º˛)lUser1°dONLNd5∞˛º)$.
  3371. È*Ò¯4Í*Ò¯ Í*Ͳ
  3372. ˇ·ˇ‚7^
  3373. ˇˇ◊.ˇ◊°dONLNd7ÿ*Èg(Â*Routinesˇˇˇˇˇˇ®(Â1
  3374. °dONLNd@ıl‚(˛lThis section describes the r@°dONLNd\ı„Ω)w2outines you use to initialize the Printing ManagerIİdONLNdéıΩ·)⁄
  3375. , print a °dONLNdòl
  3376. ß(
  3377. l document, pr °dONLNd§®
  3378. Ω)<Aoduce or alter a style or job dialog box, and handle printing errNİdONLNdÂΩ
  3379. Õ(
  3380. Ωors.ˇˇˆÿ.°dONLNdÍl´(l
  3381. The trap macr@°dONLNd˜¨Ú)@o for all of the r‰®°dONLNd    Úç)F$outines in the Printing Manager is  ˇˇ‰à§ê°dONLNd-é∏)ú_PrGlueˇˇˆÿ§ê°dONLNd4∏˜)*, and the trap .°dONLNdCl+∞((lis $A8FD. The r9¿°dONLNdR±+N)E%outine selector for each individual r≥İdONLNdwN+Ä)ù outine is pr‚`°dONLNdÉÄ+Ã)2ovided with the r] °dONLNdîÕ+Ó)Moutine. 
  3382. O*W¯4P*W¯ P*P˛
  3383. ˇ·ˇ‚7^
  3384. °dONLNdùB*P(L*)Opening and Closing the Printing Manager ˇˇˇˇˇˇ(LÚ1
  3385. °dONLNd«Wlcr(`lY@İdONLNd»WrcK).ou must always open the Printing Manager beforF°dONLNdˆWKc›)Ÿ#e attempting to print and close it °dONLNdcloΩ(llwhen printing is fi/@°dONLNd,cæoå)R0nished. If you don’t, you risk crashing the user@°dONLNd\cçoº)œ ’s system.  
  3386. ü*߯4†*߯ †*†˛
  3387. ˇ·ˇ‚7^
  3388. °dONLNdjí*†W(ú*PrOpen &İdONLNdqíX†[). ˇˇˇˇˇˇ(úÚ1
  3389. .°dONLNds±lΩë(∫lUse the °dONLNd{±ëΩµ)%PrOpen°dONLNdűµΩ¡)$ prR`°dONLNdѱ¡Ωfi) ocedur$¿°dONLNdä±fiΩ˙)e to pr˜ °dONLNd뱢Ω)epar…İdONLNdï±Ωö) e the Printing Manager for use. °dONLNd∂…l’“(“lPROCEDURE PrOpen;
  3390. .°dONLNd»Ò*˙c(¯* DESCRIPTION
  3391. .°dONLNd‘l s+BYï°dONLNd’r €)ou must always use the ï°dONLNdÏ€ ˇ)iPrOpenï°dONLNdÚˇ  )$ prg`°dONLNdı  () ocedur9¿°dONLNd˚( F)e befor  °dONLNdF ’) e attempting to print anything. 
  3392. .°dONLNd#&*/Q(-*ASSEMBLfl°dONLNd*&P/≤)&Y LANGUAGE INFORMAðdONLNd<&≤/«)bTION
  3393. .°dONLNdA5lAÑ(>lThe rR`°dONLNdF5ÑAË)outine selector for the R`°dONLNd^5ËA )dPrOpenR`°dONLNdd5 A)$ pr$¿°dONLNdg5A5) ocedur˜ °dONLNdm54Az)e is $C8000000. 
  3394.     .°dONLNd~ElPq(MlTÄ–°dONLNdEqPú)    rap macro°dONLNdäE¸P)ãTÄ–°dONLNdãEP)rap
  3395. .°dONLNdèSl_ñ(\l_PrGlue.°dONLNdòS¸_)ê$A8FD
  3396. è*ó¯4ê*ó¯ ê*ê˛
  3397. ˇ·ˇ‚7^
  3398. °dONLNdüÇ*êW(å*PrClose &İdONLNdßÇXê[). ˇˇˇˇˇˇ(åÚ1
  3399. .°dONLNd©°l≠ë(™lUse the °dONLNd±°ë≠ª)%PrClose°dONLNd∏°ª≠«)* prR`°dONLNdª°«≠‰) ocedur$¿°dONLNd¡°‰≠à)%e to close the Printing Manager and r˜ °dONLNdʰá≠Ë)£elease the memory it .°dONLNd˚≠lπÜ(∂lused. ˇ>@ˇ ˇˇˇˇ@
  3400. ˇ·ˇ‚7^
  3401. 4H\, Palatino
  3402. .+ä"CHAPTER €`)\1,     Helvetica
  3403.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3404. ~¿(‡1
  3405. ‡)-a¿)41
  3406. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  3407. Courier
  3408. .°dONLNd\ähˆ(eäPROCEDURE PrClose;
  3409. .°dONLNdÑHçÅ(ãH DESCRIPTION
  3410. .°dONLNdìäüû+BThe °dONLNd#ìûü»)PrClose°dONLNd*ì»ü‘)* prR`°dONLNd-ì‘üÒ) ocedur$¿°dONLNd3ìÒü°)*e is the call that balances a call to the $¿°dONLNd]ì°ü≈)∞PrOpen$¿°dONLNdcì≈ü—)$ pr˜ °dONLNdfì–üÌ) ocedur…İdONLNdlìÌüı)e.°dONLNdo•ä±p(Æä1If you have opened the Printing Manager with the °dONLNd†•p±î)ÊPrOpen°dONLNd¶•)$ prR`°dONLNd©•†±Ω) ocedur$¿°dONLNdØ•Ω±
  3411. )e, do not call the °dONLNd¬±äΩÃ(∫ä PrDrvrClose°dONLNdÕ±ÃΩÿ)B prR`°dONLNd–±ÿΩı) ocedur$¿°dONLNd÷±ıΩÄ)e to close the Printing Managerg`°dONLNdı±ΩÇ)ä.
  3412. .°dONLNd˜◊H‡o(fiHASSEMBLfl°dONLNd˛◊n‡–)&Y LANGUAGE INFORMAðdONLNd◊–‡Â)bTION
  3413. .°dONLNdÊäÚ¢(ÔäThe rR`°dONLNdÊ¢Ú)outine selector for the R`°dONLNd2ÊÚ0)dPrCloseR`°dONLNd9Ê0Ú<)* pr$¿°dONLNd<Ê<ÚY) ocedur˜ °dONLNdBÊXÚü)e is $D0000000. 
  3414.     .°dONLNdSˆäè(˛äTÄ–°dONLNdTˆè∫)    rap macro°dONLNd_ˆ)ãTÄ–°dONLNd`ˆ-)rap
  3415. .°dONLNddä¥(
  3416. ä_PrGlue.°dONLNdm9)ê$A8FD
  3417. 4H<45H< 5H5
  3418. ˇ·ˇ‚7^
  3419. °dONLNds'H5ç(1H
  3420. Filling and Vl¿°dONLNdÄ'å5Ù)Derifying Print Recor∫@°dONLNdî'Ù5)hdsˇˇˇˇˇˇ(11
  3421. °dONLNdó<äHê(EäY@İdONLNdò<êHº)    ou must fi$`°dONLNd¢<ΩHÚ)-ll the print r`°dONLNd∞<ÚH)5ecor|¿°dONLNd¥<HÑ)d with the values for the curr-¿°dONLNd“<ÖH›)Åent printer driver or<@°dONLNdÁ<›H
  3422. )X
  3423. , if a print °dONLNdÙHäTç(QärE°dONLNdıHéT†)ecorπ`°dONLNd˘H†T¥)d alrİdONLNd˛HµTö)7eady exists, verify that the information in the print rw¿°dONLNd5HöT¨)ÂecorÏ °dONLNd9H¨T–)    d is corr †°dONLNdBH–T)$ect. If the print °dONLNdTTä`ç(]ärE°dONLNdUTé`†)ecorπ`°dONLNdYT†`)d is not valid for the currfi‡°dONLNdtT`Z)nent printer driver@°dONLNdÜT[`Ú)M#, the document will not print. The .°dONLNd©`älΔ(iä
  3424. PrValidate°dONLNd≥`Δl)< function ensurR`°dONLNd¬`lV)?es that the print r$¿°dONLNd’`Vlh)Qecor˜ °dONLNdŸ`glÍ)d is compatible with the curr…İdONLNdˆ`Íl˙)Éent °dONLNd˙läx
  3425. (uäversions of the printer driver¬†°dONLNdl x%)Ç. The ¬†°dONLNdl%xm) PrintDefault¬†°dONLNd*lmxy)H prï°dONLNd-lyxñ) ocedurg`°dONLNd3lñx§)e fig`°dONLNd7l§x‚)lls in a print r9¿°dONLNdGl‚xÙ)>ecor  °dONLNdKlÙx)d with .°dONLNdRxäÑ
  3426. (Åäthe default values for the curr≠@°dONLNdqx
  3427. Ñj)Éently selected printerBİdONLNdáxjÑˇ)]!. These functions may change the °dONLNd®Ñäêù(çäcoor†@°dONLNd¨Ñùê˜)dinates of the page rÖ`°dONLNd¡јê©)Z*ectangle or any other value in the print rŒ†°dONLNdÎÑ©êª)≤ecorC°dONLNdÔѺê )d; you should not °dONLNdêäú˜(ôäassume any values will rp¿°dONLNdê˜ú>)memain the same.
  3428. ÃH‘4ÕH‘ ÕHÕ
  3429. ˇ·ˇ‚7^
  3430. °dONLNd*øHÕ](…HPrVÄ@°dONLNd-ø\ÕÑ)alidate œÄ°dONLNd5øÑÕá)( ˇˇˇˇˇˇ(…1
  3431. °dONLNd7fiä͈(ÁäWhen you have a print ro@°dONLNdNfiˆÍ)lecor„†°dONLNdRfiÍÜ)d, whether an existing one fr_°dONLNdofiáÍ∫) om the curr¥‡°dONLNdzfi∫Í )3ent document or a .°dONLNdåÍäˆÙ(Ûänew one you have just crR`°dONLNd§ÍÙˆX)jeated, you can use the R`°dONLNdªÍXˆî)d
  3432. PrValidateR`°dONLNd≈Íîˆı)< function to check the .°dONLNd‹ˆäÈ(ˇäcontents of the specifi(¿°dONLNdÛˆÍ)`
  3433. ed print rƒ°dONLNd˝ˆ%))ecor8`°dONLNdˆ&¥)!d for compatibility with the currËİdONLNd"ˆ¥)éent version of the °dONLNd5ä˜( äprinter driver of the curr\ °dONLNdO˜&)m ent printer©@°dONLNdZ%*).. .°dONLNd]ä&§(#ä/FUNCTION PrValidate (hPrint: THPrint): Boolean;°dONLNdç2ä>Æ*hPrint.°dONLNdî2Ã>8)BThe handle to the specifi؆°dONLNd≠28>a)l
  3434. ed print rJ‡°dONLNd∑2b>t)*ecorø@°dONLNdª2t>‡)d, which may be a new r¿°dONLNd“2·>Û)mecorç °dONLNd÷2Û>)d or an °dONLNdfi>ÃJ
  3435. (GÃexisting one frL@°dONLNdÌ> JR)?om a document.
  3436. °dONLNd¸dHmÅ(kH DESCRIPTION
  3437. .°dONLNdsä√+BIf the print rR`°dONLNds√’)9ecor$¿°dONLNds’) d is valid, $¿°dONLNd&sB)1
  3438. PrValidate$¿°dONLNd0sBH)< r˜ °dONLNd2sGd)eturns ˜ °dONLNd9sdÇ)FALSE˜ °dONLNd>sÇ√), meaning ther…İdONLNdLs√)Ae is no change. If °dONLNd_äã†(àäthe rR`°dONLNdd†ã≤)ecor$¿°dONLNdh≤ã()d is invalid, the function r˜ °dONLNdÑ'ãD)ueturns ˜ °dONLNdãDã\)TRUE˜ °dONLNdè\ã)& and the Printing Manager adjusts the .°dONLNdµãäóç(îärE°dONLNd∂ãéó†)ecorπ`°dONLNd∫ã†ó!)d with the default values storG°dONLNdÿã"óp)Çed in the printer r5†°dONLNdÎãpóà)Nesour}‡°dONLNdãàóô)ce fiDİdONLNdıãöó§)le.ˇ<@ˇ ˇˇˇˇ@
  3439. ˇ·ˇ‚7^
  3440. 4*\˜, Palatino
  3441. .+l"CHAPTER €`)\1,     Helvetica
  3442.     (@lThe Printing Manager4⁄*˙¯
  3443. (‡*1 )-c)42
  3444.     )9    Reference
  3445. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3446. Courier
  3447. .°dONLNd\lh®(el
  3448. PrValidate°dONLNd
  3449. \®hÎ)< also makes surR`°dONLNd\Îhù)C)e that all the information in the print r$¿°dONLNdB\ùhØ)≤ecor˜ °dONLNdF\ÆhÒ)d is internally .°dONLNdVhlt(ql'self-consistent and updates the print ræ`°dONLNd}ht%)ßecor2¿°dONLNdÅh&te)d as necessary@`°dONLNdèhdt“)>. These changes do not afÏ@°dONLNd®h“tÙ)n    fect the °dONLNd±tlă(}lfunction’s Boolean r·†°dONLNd≈tƒÄfi)Xesult. .°dONLNdÕÜlíª(èlIf you have just crR`°dONLNd‡Üªí¸)Oeated a print r$¿°dONLNdÔܸí)Aecor˜ °dONLNdÛÜ
  3450. íC)
  3451. d, using the ˜ °dONLNdÜCíã)6 PrintDefault˜ °dONLNd Üãíó)H pr…İdONLNdÜóí¥) ocedurõ‡°dONLNdÜ¥íÌ)e, you do not °dONLNd#ílû¢(õl
  3452. need to call °dONLNd0í¢ûfi)6
  3453. PrValidate°dONLNd:ífiû˜)<. The °dONLNd@í˜û?) PrintDefault°dONLNdLí?ûK)H prR`°dONLNdOíKûh) ocedur$¿°dONLNdUíhû‹)e does this automatically    °dONLNdní€û‡)s. 
  3454. ´*∏¯4¨*∑¯,
  3455.  
  3456. Zapf Dingbats
  3457. .°dONLNdˇˇ(≤Xs
  3458. °dONLNdˇˇ+WúİdONLNdˇˇ)ARNING
  3459. ˇ·ˇ‚7^
  3460. .°dONLNdqµl¡s(ælYï°dONLNdrµr¡Œ)ou should never call ï°dONLNdᵌ¡
  3461. )\
  3462. PrValidateï°dONLNdëµ
  3463. ¡t)< between the pages of a °dONLNd©¡lÕ∂( ldocument. This rR`°dONLNdπ¡∂ÕC)J!estriction holds as well for the R`°dONLNd⁄¡CÕÖ)ç PrStlDialogR`°dONLNd¡ÖÕö)B and °dONLNdÍÕlŸÆ(÷l PrJobDialog°dONLNdıÕÆŸˇ)B functions and the °dONLNdÕˇŸG)Q PrintDefault°dONLNdÕGŸS)H prR`°dONLNdÕSŸp) ocedur$¿°dONLNdÕpŸö)    e, which °dONLNd&ŸlÂÄ(‚lcall °dONLNd+ŸÄº)
  3464. PrValidate°dONLNd5ŸºÂø)<.
  3465. .°dONLNdˇˇ)s°dONLNdK*    Q(*ASSEMBLfl°dONLNdRP    ≤)&Y LANGUAGE INFORMAðdONLNdd≤    «)bTION
  3466. .°dONLNdilÑ(lThe rR`°dONLNdnÑË)outine selector for the R`°dONLNdÜË$)d
  3467. PrValidateR`°dONLNdê$â)< function is $52040498. 
  3468.     .°dONLNd©l)q(&lTÄ–°dONLNd™q)ú)    rap macro°dONLNdµ¸))ãTÄ–°dONLNd∂))rap
  3469. .°dONLNd∫,l8ñ(5l_PrGlue.°dONLNd√,¸8)ê$A8FD
  3470. i*q¯4i*p¯ i*i˛
  3471. ˇ·ˇ‚7^
  3472. °dONLNd [*ir(e*
  3473. PrintDefault  @°dONLNd◊[riu)H ˇˇˇˇˇˇ(eÚ1
  3474. .°dONLNdŸzlܧ(Él When you crR`°dONLNd‰z§Üfl)8eate a print r$¿°dONLNdÚzflÜÒ);ecor˜ °dONLNdˆzÜ/)d, you use the ˜ °dONLNdz/Üw)? PrintDefault˜ °dONLNdzwÜÉ)H pr…İdONLNdzÉ܆) ocedurõ‡°dONLNdz†Üπ)e to fiõ‡°dONLNd!zπÜ‹)ll the fiõ‡°dONLNd*z‹ÜÒ)#elds .°dONLNd/Ülí§(èl
  3475. of the specifidONLNd=ܧíÕ)8
  3476. ed print r0 °dONLNdGÜŒí‡)*ecor§Ä°dONLNdK܇íS)d with default values for r‡°dONLNdfÜTíÊ)t!esolution, number of copies, and °dONLNdáílûÙ(õl other information in the print rM‡°dONLNdßíıû)âecor¬@°dONLNd´íûC)d and its subrC†°dONLNdπíDûV)=ecor∏°dONLNdΩíVûe)ds. .°dONLNd¬™l∂b(≥l)PROCEDURE PrintDefault (hPrint: THPrint);°dONLNdϬlŒê*hPrint.°dONLNd۬ƌ)BThe handle to the specifi؆°dONLNd ¬ŒC)l
  3477. ed print rJ‡°dONLNd¬DŒV)*ecorø@°dONLNd¬VŒ¬)d, which may be a new r¿°dONLNd1¬√Œ’)mecorç °dONLNd5¬’Œˆ)d or an °dONLNd=ŒÆ⁄Ï(◊Æexisting one frL@°dONLNdLŒÌ⁄4)?om a document.
  3478. °dONLNd[ı*˛c(¸* DESCRIPTION
  3479. °dONLNdglÚ+BThe default values for the currㆰdONLNdÜÚ,)Üent printer ar€ °dONLNdî,D):e storfi†°dONLNdöDí)ed in the printer rÕ@°dONLNd≠í™)NesourİdONLNd≤´º)ce fi‹ °dONLNd∑º»)le. ˇˇxæ.°dONLNdªl¥(l PrintDefaultˇˇ“ͰdONLNd«¥>)H! puts these values in the print rΔ°dONLNdË?Q)ãecorÈ&°dONLNdÏPfi) d, erasing the ones that may alr≠°dONLNd fl˜)èeady ˇˇI°dONLNdl'ã($lbe therõ|°dONLNdã'Ã)e (if the print ríL°dONLNd)Ã'fi)Aecord¨°dONLNd-fi'Û)d alrÄ(°dONLNd2Û'4)eady existed). ˇ˝€T`°dONLNdA5'})B PrintDefaultˇˇI`°dONLNdM}'ï)H calls ˇ˝€T§ò°dONLNdTï'—)
  3480. PrValidateˇˇI§ò°dONLNd^—'˜)<
  3481.  to check .°dONLNdh'l3ò(0l the print r@°dONLNds'ô3´)-ecorᆰdONLNdw'´39)!d for compatibility with the curr7¿°dONLNdò':3≈)è!ent version of the printer driverS†°dONLNdπ'≈3 )ã. 
  3482. °dONLNdºN*WQ(U*ASSEMBLfl°dONLNd√NPW≤)&Y LANGUAGE INFORMAðdONLNd’N≤W«)bTION
  3483. .°dONLNd⁄\lhÑ(elThe rR`°dONLNdfl\ÑhË)outine selector for the R`°dONLNd˜\Ëh0)d PrintDefaultR`°dONLNd\0h<)H pr$¿°dONLNd\<hY) ocedur˜ °dONLNd \Xhú)e is $20040480. 
  3484.     .°dONLNdllwq(tlTÄ–°dONLNdlqwú)    rap macro°dONLNd)l¸w)ãTÄ–°dONLNd*lw)rap
  3485. .°dONLNd.zlÜñ(Él_PrGlue.°dONLNd7z¸Ü)ê$A8FD
  3486. °dONLNd=°*™Q(®*SEE ALSO
  3487. °dONLNdFØlªõ+B The print rÒ†°dONLNdQØõª≠)/ecorf°dONLNdUØÆª˘)d is discussed in x¿°dONLNdgØ˘ªC)K“The Print RecorO@°dONLNdwØCª‚)J#d and the Printing Loop” on page 1-ı@°dONLNdöØ‚ªÁ)ü7ı@°dONLNdõØÁªÏ). ˇÜ@ˇ ˇˇˇˇ@
  3488. ˇ·ˇ‚7^
  3489. 4H\, Palatino
  3490. .+ä"CHAPTER €`)\1,     Helvetica
  3491.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3492. ~¿(‡1
  3493. ‡)-a¿)43
  3494. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3495. jHq4jHq jHj
  3496. ˇ·ˇ‚7^
  3497. °dONLNd\Hjk(fH4Displaying and Customizing the Printing Dialog Boxesˇˇˇˇˇˇ(f1
  3498. °dONLNd5qä}(zäXThe style and job dialog boxes allow the user to tell your application how to print the °dONLNdç}äâ‰* Ndocument: page orientation, number of copies, page range to print, and so on. û@°dONLNd€}‰âÍ(܉Y^¿°dONLNd‹}Íâ    )ou can °dONLNd„âäïÔ(íäuse the dialog boxes prO¿°dONLNd˙âï})fovided by the Printing Manager_°dONLNdâ}ïÛ)ç, or you can customize the °dONLNd3ïä°´(ûästandar±Ä°dONLNd:ï´°)!d dialog boxes. Ω °dONLNdJï°ˆ)EY}†°dONLNdKB)ou can copy the rU@°dONLNd\ïB°È)L(esults of one job dialog box to several °dONLNdѰä≠∂(™äAdocuments when the user wants to print several documents at once..°dONLNdΔ≥äøû*The ,
  3499. Courier°dONLNd ≥ûø‡) PrStlDialog°dONLNd’≥‡øı)B and °dONLNd⁄≥ıø7) PrJobDialog°dONLNdÂ≥7øæ)B functions display the standarR`°dONLNd≥æø)ád style and job °dONLNdøäÀ€(»ädialog boxes. The °dONLNd%ø€À)Q    PrDlgMain°dONLNd.øÀg)6 function, using the °dONLNdCøgÀù)V    PrStlInit°dONLNdLøùÀ≤)6 and °dONLNdQø≤ÀË)    PrJobInit°dONLNdZøËÀÍ)6 .°dONLNd[Àä◊W(‘ä.functions, allows you to customize the standarÍ@°dONLNdâÀW◊˙)Õ&d style and job dialog boxes for your °dONLNdØ◊ä„¿(‡ä
  3500. application. .°dONLNdΩÈäıû*The °dONLNd¡Èûı⁄)
  3501. PrJobMerge°dONLNdÀÈ⁄ıÊ)< prR`°dONLNdŒÈÊı) ocedur$¿°dONLNd‘Èı    )?e allows you to use one job dialog box for several print jobs, .°dONLNdıäg(˛ä1such as when the user prints several documents frs °dONLNdDıg•)›
  3502. om the Finder˝Ä°dONLNdQı§©)=. 
  3503. 1H942H9 2H2
  3504. ˇ·ˇ‚7^
  3505. °dONLNdU$H2é(.H
  3506. PrStlDialog  "İdONLNdb$è2í)G ˇˇˇˇˇˇ(.1
  3507. .°dONLNddCäO≥(Lä    Call the °dONLNdmC≥Oı)) PrStlDialog°dONLNdxCıO)BA function displays a style dialog box, which the user can use to .°dONLNdπOä[‹(XäKspecify the page dimensions and other information needed for a page setup. .°dONLNdgäs™*0FUNCTION PrStlDialog (hPrint: THPrint): Boolean;°dONLNd6äãÆ*hPrint.°dONLNd=Ãã8)BThe handle to the specifi؆°dONLNdV8ãa)l
  3508. ed print rJ‡°dONLNd`bãt)*ecorø@°dONLNddtã‡)d, which may be a new r¿°dONLNd{·ãÛ)mecorç °dONLNdÛã)d or an °dONLNdáãÃó
  3509. (îÃexisting one frL@°dONLNdñã óR)?om a document.
  3510. °dONLNd•±H∫Å(∏H DESCRIPTION
  3511. °dONLNd±¿äÃÙ+BUThe Printing Manager takes the initial settings displayed in the style dialog box  fr≤İdONLNd¿ÙÃ(…Ùom the .°dONLNd
  3512. Ãäÿß(’äprint rR`°dONLNdÃßÿπ)ecor$¿°dONLNdÃπÿ    )d. If the user confi$¿°dONLNd,à   ÿs)Prms the dialog box, the $¿°dONLNdDÃsÿµ)j PrStlDialog$¿°dONLNdOõÿ·)B  function r˜ °dONLNdZÇÿ˝)+eturns .°dONLNdaÿä‰M(·ä*TRUE, and the Printing Manager saves the r[¿°dONLNdãÿM‰Ì)√&esults of the dialog box in the specifi °dONLNd≤ÿÓ‰)°    ed print ˇˇøD.°dONLNdª‰äé(ÌärR`°dONLNdº‰é†)ecor$¿°dONLNd¿‰†„)d and calls the ˇˇ=Ã!–°dONLNd–‰‰ )D
  3513. PrValidateˇˇøD!–°dONLNd⁄‰ Æ)<! function. Otherwise, the print r∞ѰdONLNd˚‰Æ¿)éecorlj°dONLNdˇ‰¿)d is left unchanged .°dONLNd丟(˘äand the function rù¿°dONLNd%Ÿ¸˝)Oeturns F†°dONLNd-˝¸)$ALSE. 
  3514. °dONLNd4Ho(HASSEMBLfl°dONLNd;n–)&Y LANGUAGE INFORMAðdONLNdM–Â)bTION
  3515. .°dONLNdR%ä1¢(.äThe rR`°dONLNdW%¢1)outine selector for the R`°dONLNdo%1H)d PrStlDialogR`°dONLNdz%H1∞)B function is $2A040484. 
  3516.     .°dONLNdì5ä@è(=äTÄ–°dONLNdî5è@∫)    rap macro°dONLNdü5@)ãTÄ–°dONLNd†5@-)rap
  3517. .°dONLNd§CäO¥(Lä_PrGlue.°dONLNd≠CO9)ê$A8FD
  3518. Há4ÄHá ÄHÄ
  3519. ˇ·ˇ‚7^
  3520. °dONLNd¥rHÄé(|H PrJobDialog |İdONLNd¿rèÄí)G ˇˇˇˇˇˇ(|1
  3521. .°dONLNd¬ëäùë(öäYï°dONLNd√ëêù”)ou can call the ï°dONLNd”ë”ù)C PrJobDialogï°dONLNdfiëùR)B function to prg`°dONLNdÌëRù)=+oduce a job dialog box, which the user can .°dONLNdùä©(¶ä"use to determine the print qualityˆ°dONLNd:ù©À)ì*, the range of pages to print, and so on. ˇF@ˇ ˇˇˇˇ@
  3522. ˇ·ˇ‚7^
  3523. 4*\˜, Palatino
  3524. .+l"CHAPTER €`)\1,     Helvetica
  3525.     (@lThe Printing Manager4⁄*˙¯
  3526. (‡*1 )-c)44
  3527.     )9    Reference
  3528. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3529. Courier
  3530. .°dONLNd\lhÜ(el/FUNCTION PrJobDialog(hPrint: THPrint): Boolean;°dONLNd0tlÄê*hPrint.°dONLNd7tÆÄ)BThe handle to the specifi؆°dONLNdPtÄC)l
  3531. ed print rJ‡°dONLNdZtDÄV)*ecorø@°dONLNd^tVĬ)d, which may be a new r¿°dONLNdut√Ä’)mecorç °dONLNdyt’Ĉ)d or an °dONLNdÅÄÆåÏ(âÆexisting one frL@°dONLNdêÄÌå4)?om a document.
  3532. °dONLNdü¶*Øc(≠* DESCRIPTION
  3533. °dONLNd´µl¡e+B:The printer driver shows the default settings for the curr¸ °dONLNdµe¡ı)˘#ent printer in the job dialog box. °dONLNd¡lÕ∞( lIf the user confiT°dONLNd¡±Õ“)EArms the dialog box, the Printing Manager updates both the print r†°dONLNdZ¡”ÕÂ( ”ecorɰdONLNd^¡ÂÕÌ)d .°dONLNd`ÕlŸ∑(÷land the printer rR`°dONLNdqÕ∑ŸŒ)Kesour$¿°dONLNdvÕŒŸ‡)ce fi$¿°dONLNd{Õ‡Ÿ()le and calls the $¿°dONLNdåÕ(Ÿd)H
  3534. PrValidate$¿°dONLNdñÕdŸ¥)< function, and the $¿°dONLNd©Õ¥Ÿˆ)P PrJobDialog$¿°dONLNd¥ÕˆŸ¯)B .°dONLNdµŸlÂó(‚l
  3535. function r”@°dONLNdøŸóÂ4)+#eturns TRUE. Otherwise, the print rû@°dONLNd‚Ÿ5ÂG)ûecor†°dONLNdÊŸHÂô)d and the printer rk°dONLNd˘Ÿô±)Qesour≥@°dONLNd˛Ÿ±Â¬)ce fiy‡°dONLNdŸ√Â÷)le arp‡°dONLNdŸ÷ÂÓ)e left °dONLNdÂlÒÔ(Ólunchanged and the function r}¿°dONLNd+ÂÔÒ)Éeturns F„†°dONLNd3ÂÒ0)#ALSE. .°dONLNd:˜là(lIf the °dONLNdA˜à ) PrJobDialog°dONLNdL˜ ˆ)B  function rR`°dONLNdW˜ˆp),eturns TRUE, you should pr$¿°dONLNdq˜p∫)zoceed with the r˜ °dONLNdŘπ‚)I    equested .°dONLNdäl¬( lprinting operation. 
  3536. °dONLNdü)*2Q(0*ASSEMBLfl°dONLNd¶)P2≤)&Y LANGUAGE INFORMAðdONLNd∏)≤2«)bTION
  3537. .°dONLNdΩ8lDÑ(AlThe rR`°dONLNd¬8ÑDË)outine selector for the R`°dONLNd⁄8ËD*)d PrJobDialogR`°dONLNdÂ8*Dè)B function is $32040488. 
  3538.     .°dONLNd˛HlSq(PlTÄ–°dONLNdˇHqSú)    rap macro°dONLNd
  3539. H¸S)ãTÄ–°dONLNd HS)rap
  3540. .°dONLNdVlbñ(_l_PrGlue.°dONLNdV¸b)ê$A8FD
  3541. í*ö¯4ì*ö¯ ì*ì˛
  3542. ˇ·ˇ‚7^
  3543. °dONLNdÖ*ìj(è*
  3544. PrDlgMain z@°dONLNd)Ökìz)A     ˇˇˇˇˇˇ(èÚ1
  3545. .°dONLNd/§l∞ë(≠lUse the °dONLNd7§ë∞«)%    PrDlgMain°dONLNd@§«∞–)6> function to display a style or job dialog box after you have .°dONLNd~∞lº¨(πlcustomized it. .°dONLNdé»l‘Ú*AFUNCTION PrDlgMain (hPrint: THPrint; pDlgInit: PDlgInitProcPtr): °dONLNd⁄÷Í‚+~Boolean;°dONLNd„Ól˙ê(˜lhPrint.°dONLNdÍÓÆ˙)BThe handle to the specifi؆°dONLNdÓ˙C)l
  3546. ed print rJ‡°dONLNd
  3547. ÓD˙V)*ecorø@°dONLNdÓV˙¬)d, which may be a new r¿°dONLNd(Ó√˙’)mecorç °dONLNd,Ó’˙ˆ)d or an °dONLNd4˙ÆÏ(Æexisting one frL@°dONLNdC˙Ì4)?om a document.°dONLNdR
  3548. lë(lpDlgInit°dONLNd[
  3549. Ƶ)BA∫†°dONLNd\
  3550. µ7)  pointer to an initialization pr @°dONLNd|
  3551. 7U)ÇoceduraİdONLNdÇ
  3552. V’)e for one of the two Printing °dONLNd†Æ"ƒ(Æ?Manager printing dialog boxes, or to your own initialization pr˚‡°dONLNdflƒ"‚(ƒocedurì °dONLNd„"Ï)e. 
  3553. °dONLNdÈ<*Ec(C* DESCRIPTION
  3554. .°dONLNdıKlWs+BYï°dONLNdˆKrW±)ou can use the ï°dONLNdK±WÁ)?    PrDlgMainï°dONLNdKÁWÚ)6@ function to set up a printing dialog box, or you can initalize °dONLNdNWlcH(`l3the style or job dialog box yourself and then send °dONLNdÅWHc~)‹    PrDlgMain°dONLNdäW~cÿ)6 your initialization .°dONLNdücloñ(ll
  3555. function. .°dONLNd™ulÅP*4The printing dialog boxes initialization functions, °dONLNdfiuPÅÜ)‰    PrStlInit°dONLNdÁuÜÅõ)6 and °dONLNdÏuõÅ—)    PrJobInit°dONLNdıu—ÅÚ)6    , set up °dONLNd˛Ålç¬(älthe dialog box in a °dONLNdŬçÊ)VTPrDlg°dONLNdÅÊçÏ)$ rR`°dONLNdÅÏç˛)ecor$¿°dONLNdŞçC)d (described on $¿°dONLNd.ÅCçd)Epage 1-$¿°dONLNd5Ådçn)!39$¿°dONLNd7ÅnçÙ)
  3556. ), which contains pointers for .°dONLNdVçlôª(ñlthe dialog event fi(İdONLNdiçºô˚)Plter and the pr! °dONLNdxç˚ô)?ocedur∏`°dONLNd~çô€).e for evaluating the items of the dialog box, °dONLNd¨ôl•…(¢lincluding your own. ˇx@ˇ ˇˇˇˇ@
  3557. ˇ·ˇ‚7^
  3558. 4H\, Palatino
  3559. .+ä"CHAPTER €`)\1,     Helvetica
  3560.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3561. ~¿(‡1
  3562. ‡)-a¿)45
  3563. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3564. °dONLNd\Heo(cHASSEMBLfl°dONLNd\ne–)&Y LANGUAGE INFORMAðdONLNd\–eÂ)bTION
  3565. .°dONLNdkäw¢(täThe rR`°dONLNd#k¢w)outine selector for the ,
  3566. CourierR`°dONLNd;kw<)d    PrDlgMainR`°dONLNdDk<w§)6 function is $4A040894. 
  3567.     .°dONLNd]{äÜè(ÉäTÄ–°dONLNd^{èÜ∫)    rap macro°dONLNdi{Ü)ãTÄ–°dONLNdj{Ü-)rap
  3568. .°dONLNdnâäï¥(íä_PrGlue.°dONLNdwâï9)ê$A8FD
  3569. °dONLNd}ØH∏o(∂HSEE ALSO
  3570. °dONLNdÜæä ≠+BFor mor¿°dONLNdçæÆ ¡)$?e information about customizing style or job dialog boxes, see - °dONLNdÃæ¡ («¡“Altering the Style °dONLNd‡ ä÷ (”äor Job Dialog Box” on page 1-{@°dONLNd˝ 
  3571. ÷)É23{@°dONLNdˇ ÷)
  3572. .
  3573. H4H H
  3574. ˇ·ˇ‚7^
  3575. °dONLNd˘Hz(H
  3576. PrStlInit ðdONLNd ˘z})2 ˇˇˇˇˇˇ(1
  3577. .°dONLNdä$û(!äThe °dONLNdû$‘)    PrStlInit°dONLNd‘$)6  function rR`°dONLNd&$Ï),7eturns a pointer to the style dialog box (described on R`°dONLNd]Ï$)Ïpage .°dONLNdb$ä0í(-ä1-”‡°dONLNdd$í0ó)7”‡°dONLNde$ó0n)0) in memory but does not display the dialog box..°dONLNdñ<äHû(Eä.FUNCTION PrStlInit (hPrint: THPrint): TPPrDlg;°dONLNd≈Tä`Æ*hPrint.°dONLNdÃTÃ`8)BThe handle to the specifi؆°dONLNdÂT8`a)l
  3578. ed print rJ‡°dONLNdÔTb`t)*ecorø@°dONLNdÛTt`‡)d, which may be a new r¿°dONLNd
  3579. T·`Û)mecorç °dONLNdTÛ`)d or an °dONLNd`Ãl
  3580. (iÃexisting one frL@°dONLNd%` lR)?om a document.
  3581. °dONLNd4ÜHèÅ(çH DESCRIPTION
  3582. .°dONLNd@ïä°ë+BYï°dONLNdAïê°⁄)ou pass the addrg`°dONLNdQï⁄°)J ess of the g`°dONLNd\ï°<),    PrStlInitg`°dONLNdeï<°Å)6 function in the g`°dONLNdvï۱)EpDlgInitg`°dONLNd~ï±°)0 parameter of the °dONLNdê°ä≠¿(™ä    PrDlgMain°dONLNdô°¿≠N)6! function, which is described on °dONLNd∫°N≠o)épage 1-°dONLNd¡°o≠y)!44°dONLNd√°y≠í)
  3583. . The °dONLNd…°í≠»)    PrStlInit°dONLNd“°»≠Ù)6  function rR`°dONLNd›°Ù≠),eturns .°dONLNd‰≠äπ5(∂ä)a pointer to a printing style dialog box.
  3584. °dONLNd”H‹o(⁄HASSEMBLfl°dONLNd”n‹–)&Y LANGUAGE INFORMAðdONLNd'”–‹Â)bTION
  3585. .°dONLNd,‚äÓ¢(ÎäThe rR`°dONLNd1‚¢Ó)outine selector for the R`°dONLNdI‚Ó<)d    PrStlInitR`°dONLNdR‚<Ó•)6 function is $3C04040C. 
  3586.     .°dONLNdkÚä˝è(˙äTÄ–°dONLNdlÚè˝∫)    rap macro°dONLNdwÚ˝)ãTÄ–°dONLNdxÚ˝-)rap
  3587. .°dONLNd|ä ¥(    ä_PrGlue.°dONLNdÖ 9)ê$A8FD
  3588. °dONLNdã&H/o(-HSEE ALSO
  3589. °dONLNdî5äA≠+BFor mor¿°dONLNdõ5ÆA¡)$?e information about customizing style or job dialog boxes, see - °dONLNd⁄5¡A(>¡“Altering the Style °dONLNdÓAäM (Jäor Job Dialog Box” on page 1-{@°dONLNd A
  3590. M)É23{@°dONLNd
  3591. AM)
  3592. .
  3593. }HÖ4~HÖ ~H~
  3594. ˇ·ˇ‚7^
  3595. °dONLNdpH~}(zH
  3596. PrJobInit &°dONLNdp~~Å)6 ˇˇˇˇˇˇ(z1
  3597. .°dONLNdèäõû(òäThe °dONLNd èûõ‘)    PrJobInit°dONLNd)è‘õ)6  function rR`°dONLNd4èõ·),5eturns a pointer to the job dialog box (described on R`°dONLNdiè·õ)·page 1-R`°dONLNdpèõ)!7R`°dONLNdqèõ
  3598. )) .°dONLNdsõäß](§ä/in memory but does not display the dialog box. .°dONLNd£≥äøû*.FUNCTION PrJobInit (hPrint: THPrint): TPPrDlg;ˇ*@ˇ ˇˇˇˇ@
  3599. ˇ·ˇ‚7^
  3600. 4*\˜, Palatino
  3601. .+l"CHAPTER €`)\1,     Helvetica
  3602.     (@lThe Printing Manager4⁄*˙¯
  3603. (‡*1 )-c)46
  3604.     )9    Reference
  3605. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  3606. Courier
  3607. .°dONLNd\lhê(elhPrint.°dONLNd\Æh)BThe handle to the specifi؆°dONLNd \hC)l
  3608. ed print rJ‡°dONLNd*\DhV)*ecorø@°dONLNd.\Vh¬)d, which may be a new r¿°dONLNdE\√h’)mecorç °dONLNdI\’hˆ)d or an °dONLNdQhÆtÏ(qÆexisting one frL@°dONLNd`hÌt4)?om a document.
  3609. °dONLNdoé*óc(ï* DESCRIPTION
  3610. .°dONLNd{ùl©s+BYï°dONLNd|ùr©º)ou pass the addrg`°dONLNdåùº©Ë)J ess of the g`°dONLNdóùË©),    PrJobInitg`°dONLNd†ù©c)6 function in the g`°dONLNd±ùc©ì)EpDlgInitg`°dONLNdπù쩉)0 parameter of the °dONLNdÀ©lµ¢(≤l    PrDlgMain°dONLNd‘©¢µ0)6! function, which is described on °dONLNdı©0µQ)épage 1-°dONLNd¸©Qµ[)!44°dONLNd˛©[µt)
  3611. . The °dONLNd©tµ™)    PrJobInit°dONLNd
  3612. ©™µ÷)6  function rR`°dONLNd©÷µÛ),eturns .°dONLNdµl¡(æl'a pointer to a printing job dialog box.
  3613. °dONLNdG€*‰Q(‚*ASSEMBLfl°dONLNdN€P‰≤)&Y LANGUAGE INFORMAðdONLNd`€≤‰«)bTION
  3614. .°dONLNdeÍlˆÑ(ÛlThe rR`°dONLNdjÍшË)outine selector for the R`°dONLNdÇÍˈ)d    PrJobInitR`°dONLNdã͈É)6 function is $44040410. 
  3615.     .°dONLNd§˙lq(lTÄ–°dONLNd•˙qú)    rap macro°dONLNd∞˙¸)ãTÄ–°dONLNd±˙)rap
  3616. .°dONLNdµlñ(l_PrGlue.°dONLNdæ¸)ê$A8FD
  3617. °dONLNdƒ.*7Q(5*SEE ALSO
  3618. °dONLNdÕ=lIè+BFor mor¿°dONLNd‘=êI£)$?e information about customizing style or job dialog boxes, see - °dONLNd=£I¯(F£“Altering the Style °dONLNd'IlUÓ(Rlor Job Dialog Box” on page 1-{@°dONLNdDIÔU˘)É23{@°dONLNdFI˘U˚)
  3619. .
  3620. Ö*ç¯4Ü*篠Ü*ܲ
  3621. ˇ·ˇ‚7^
  3622. °dONLNdIx*Üo(Ç* PrJobMerge Ä¿°dONLNdTxoÜr)E ˇˇˇˇˇˇ(ÇÚ1
  3623. .°dONLNdVól£s(†lYï°dONLNdWór£±)ou can use the ï°dONLNdfó±£Ì)?
  3624. PrJobMergeï°dONLNdpóÌ£˘)< prg`°dONLNdsó˘£) ocedur9¿°dONLNdyó£Â)1e to display a job dialog box just once and then .°dONLNd™£lØ$(¨l+copy the job information to several print r"‡°dONLNd’£%Ø7)πecoró@°dONLNdŸ£7؈)+ds, which means that you can print several °dONLNdØlªû(∏lEdocuments with one dialog box. This is useful when the user prints frÁ`°dONLNdIØûª‹(∏û
  3625. om the Finderq¿°dONLNdVØ‹ª·)>. .°dONLNdY«l”‡(–l>PROCEDURE PrJobMerge (hPrintSrc: THPrint;hPrintDst: THPrint); °dONLNdòfll΢*    hPrintSrc.°dONLNd¢flÆΛ)B The print rÒ†°dONLNd≠fl›ÎÔ)/ecorf°dONLNd±flΡ)d fr†°dONLNdµflÎ>)
  3626. om the Finder•°dONLNd¬fl=Î?)=..°dONLNdƒÔl˚¢(¯l    hPrintDst.°dONLNdŒÔÆ˚›)B The print rÒ†°dONLNdŸÔ›˚Ô)/ecorf°dONLNd›Ô˚ˇ)d fr†°dONLNd·Ô˚R)om the document. 
  3627. °dONLNdÛ*c(* DESCRIPTION
  3628. .°dONLNdˇ$l0Ä+BThe °dONLNd$Ä0º)
  3629. PrJobMerge°dONLNd
  3630. $º0»)< prR`°dONLNd$»0Â) ocedur$¿°dONLNd$Â0Û)e fi$¿°dONLNd$Û0+)rst calls the $¿°dONLNd($+0g)8
  3631. PrValidate$¿°dONLNd2$g0Ó)<! function for each of the  print °dONLNdS0l<p(9lrR`°dONLNdT0p<Ç)ecor$¿°dONLNdX0Ç<Õ)ds named by the $¿°dONLNdh0Õ<)K    hPrintSrc$¿°dONLNdq0<)6 and $¿°dONLNdv0<N)    hPrintDst$¿°dONLNd0N<ı)6' parameters. It then copies all of the °dONLNd¶<lHÀ(Elinformation set as a rR`°dONLNdº<ÀH=)_esult of a job dialog box fr$¿°dONLNdÿ<=H^)rom the $¿°dONLNdfl<^Hî)!    hPrintSrc$¿°dONLNdË<îHÂ)6 parameter to the °dONLNd˙HlT¢(Ql    hPrintDst°dONLNdH¢T˛)6 parameter while prR`°dONLNdH˛Tˆ)\9eserving the values set by the style dialog box for that °dONLNdOTl`â(]lprint rR`°dONLNdVTâ`õ)ecor$¿°dONLNdZTõ`o)0d (for instance, landscape orientation). Finally    °dONLNdäTn`Ö)”, the     °dONLNdêTÖ`¡)
  3632. PrJobMerge    °dONLNdöT¡`Õ)< pr€`°dONLNdùTÃ`È) ocedur≠¿°dONLNd£TÈ`)e ˇˇkh°dONLNd•`lló(il    makes surΩ»°dONLNdÆ`ól€)+e that all the fikh°dONLNdø`‹l()Eelds of the print rÎh°dONLNd“`(l:)LecorΩ»°dONLNd÷`:l~)d named by the ˇ˛B8kh°dONLNdÂ`lµ)E    hPrintDstˇˇkhkh°dONLNdÓ`µlÒ)6
  3633.  parameter arò°dONLNd˚`Úl¯)=e °dONLNd˝llx„(ulinternally self-consistent. R`°dONLNdl„xÍ)wYg`°dONLNdlÈx )
  3634. ou must call g`°dONLNd'l x\)7
  3635. PrJobMergeg`°dONLNd1l\xÙ)<" for each document the user wants .°dONLNdSxlÑ∏(Ålto print; howeverµ`°dONLNddx∏ÑÜ)L., it can only make one copy of each document. 
  3636. ß*∏¯4®*∏¯"®*_
  3637. ˇ·ˇ‚7^
  3638.     °dONLNdˇˇ(•l
  3639. Figure 1-6ˇΔ@ˇ ˇˇˇˇ@
  3640. ˇ·ˇ‚7^
  3641. 4H\, Palatino
  3642. .+ä"CHAPTER €`)\1,     Helvetica
  3643.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3644. ~¿(‡1
  3645. ‡)-a¿)47
  3646. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3647. °dONLNd\Heo(cHASSEMBLfl°dONLNd\ne–)&Y LANGUAGE INFORMAðdONLNd\–eÂ)bTION
  3648. .°dONLNdkäw¢(täThe rR`°dONLNd#k¢w)outine selector for the ,
  3649. CourierR`°dONLNd;kwB)d
  3650. PrJobMergeR`°dONLNdEkBwN)< pr$¿°dONLNdHkNwk) ocedur˜ °dONLNdNkjw∞)e is $5804089C. 
  3651.     .°dONLNd_{äÜè(ÉäTÄ–°dONLNd`{èÜ∫)    rap macro°dONLNdk{Ü)ãTÄ–°dONLNdl{Ü-)rap
  3652. .°dONLNdpâäï¥(íä_PrGlue.°dONLNdyâï9)ê$A8FD
  3653. πH¡4∫H¡ ∫H∫
  3654. ˇ·ˇ‚7^
  3655. °dONLNd¨H∫s(∂HPrintingˇˇˇˇˇˇ(∂1
  3656. °dONLNdà¡äÕÉ( ä7In addition to opening and closing the Printing Managerâ °dONLNdø¡ÉÕ    )˘, you must open and close the °dONLNd›ÕäŸõ(÷ä:document being printed and each page of the document beforæ°dONLNdÕõŸ˛(÷õe you can print it. The .°dONLNd/Ÿä¿(‚ä    PrOpenDoc°dONLNd8Ÿ¿Â˚)6 function and °dONLNdFŸ˚Â7);
  3657. PrCloseDoc°dONLNdPŸ7ÂC)< prR`°dONLNdSŸCÂ`) ocedur$¿°dONLNdYŸ`Â)$es open and close the document, and °dONLNd}ÂäÒú(Óäthe °dONLNdÅÂúÒÿ)
  3658. PrOpenPage°dONLNdãÂÿÒÌ)< and °dONLNdêÂÌÒ/) PrClosePage°dONLNdõÂ/Ò;)B prR`°dONLNdûÂ;ÒX) ocedur$¿°dONLNd§ÂXÒ»)es open and close the curr˜ °dONLNdæÂ«Ò)o    ent page.°dONLNd»˜äë(äYï°dONLNd…˜ê’)ou must use the ï°dONLNdŸ˜’ )E    PrPicFileï°dONLNd‚˜ )6 prg`°dONLNd˜4) ocedur9¿°dONLNdΘ4ï)e to complete a deferr  °dONLNd˜ï‚)aed printing. TherfiİdONLNd˜·˛)Le is no .°dONLNdäˇ( äspecial Printing Manager r‚°dONLNd4ˇú)u$outine for immediate printing; the r&†°dONLNdXù
  3659. )ûoutines you use to draw .°dONLNdpä (äthe document in the printing °dONLNdç <)ÇgrafPort°dONLNdï<—)0 print the document immediatelyd@°dONLNd¥–’)î. 
  3660. KHS4LHS LHL
  3661. ˇ·ˇ‚7^
  3662. .°dONLNd∏>HLé(HH PrOpenDoc  $°dONLNd√>èLí)G ˇˇˇˇˇˇ(H1
  3663. .°dONLNd≈]äiØ(fäUse the °dONLNdÕ]ØiÂ)%    PrOpenDoc°dONLNd÷]Âiv)6# function to initialize a printing °dONLNd˘]vi¶)ëgrafPort°dONLNd]¶i)0 for use in printing a .°dONLNdiäu(rädocument, make it the curr‡°dONLNd2iuA)xent port, and rZ°dONLNdAiAuô)?eturn a pointer to it..°dONLNdXÅäç
  3664. (ää@FUNCTION PrOpenDoc (hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: °dONLNd£èõb+~Ptr): TPPrPort;°dONLNd≥ßä≥Æ(∞ähPrint.°dONLNd∫ßÃ≥/)BThe handle to a print rö°dONLNd—ß/≥A)cecor`°dONLNd’ßB≥Æ)d, which may be a new rg‡°dONLNdÏ߯≥¿)lecor‹@°dONLNdß¿≥)d or an existing °dONLNd≥ÃøÂ(ºÃone fr)`°dONLNd≥Êø-)om a document..°dONLNd√䜥(ÃäpPrPort°dONLNd√Ü‘)BAÛ`°dONLNd√”œ<) pointer to the printing Û`°dONLNd8√<œl)igrafPortÛ`°dONLNd@√lœÁ)0. This parameter should be Û`°dONLNd[√Áœ˘){NILÛ`°dONLNd^√˘œ˛), ˇˇË∫°dONLNd`œÃ€ (ÿÃwhich means that ˇˇ∫.:.°dONLNdqœ!€W)U    PrOpenDocˇˇË∫:.°dONLNdzœW€«)6 allocates a new printing ˇˇ∫.≈–°dONLNd€˜)pgrafPortˇˇË∫≈–°dONLNdúœ˜€)0 in the .°dONLNd§€ÃÁÊ(‰Ãheap. .°dONLNd´Îä˜Æ(ÙäpIOBuf.°dONLNd≤ÎØ”)BA∫†°dONLNd≥Δ˜) pointer to an ar8‡°dONLNdƒÎ˜Ô)G.ea of memory to be used as an input/output buf °dONLNdÚÎÔ˜˚)’fer¿°dONLNdıÎ˚˜) . This ˇˇ∫..°dONLNd¸˜Ãñ(Ã*parameter should be NIL, which means that ˇˇ.äóB°dONLNd&˜ñÃ)     PrOpenDocˇˇ∫.óB°dONLNd/˜Ã)6 uses the volume .°dONLNd@Ã⁄( Ãbuf5°dONLNdC€))fer for the spool fi˝¿°dONLNdW)fi)N)le’s volume. If you allocate your own buf.¿°dONLNdÄflÎ)∂ferÅİdONLNdÉÍ)
  3665. , it must °dONLNdçÃ#(Ãbe 522 bytes exactly±†°dONLNd°"')V. 
  3666. °dONLNd§5H>Å(<H DESCRIPTION
  3667. .°dONLNd∞DäP+B Depending on the setting of the °dONLNd–DPO)è    bJDocLoop°dONLNdŸDOPX)6 fi°dONLNd‹DXPÕ)    eld in the printing job subrR`°dONLNd¯DÕPfl)uecor$¿°dONLNd¸DflP¸)d, the ˇˇ‹ °dONLNdPä\3(Yä&Printing Manager sets up the printing ˇˇî`®¿°dONLNd)P3\c)©grafPortˇˇ‹ ®¿°dONLNd1Pc\Œ)0 for immediate or deferrΆ°dONLNdIPŒ\)ked printing. For .°dONLNdZ\äh§(eädeferr:İdONLNd`\•h.)!ed printing, it takes the spool fiŸ °dONLNdÇ\.hÑ)âle’s name, volume rl@°dONLNdï\Öhï)Wefer`°dONLNdô\ñhœ) ence number†@°dONLNd§\Œh    )8, and version °dONLNd≤hät∂(qä    number fr    @°dONLNdªh∑t")-om the printing job subrNİdONLNd”h"t4)kecor¬‡°dONLNd◊h4t?)d. .°dONLNd€zäÜ(ÉäBecause both the printing °dONLNdızÜ0)vgrafPort°dONLNd˝z0Üè)0 and input/output bufR`°dONLNdzèÜ®)_fer ar$¿°dONLNdz®Ü¬)e nonr˜ °dONLNdz¡Ü)elocatable objects, °dONLNd2Üäíj(èä1you may want to allocate them yourself using the °dONLNdcÜjíî)‡pPrPort°dONLNdjÜîí©)* and °dONLNdoÜ©íÕ)pIOBuf°dONLNduÜÕí)$ parameters, to .°dONLNdÖíäû    (õäavoid fragmenting the heap. .°dONLNd¢§ä∞ë*Yï°dONLNd£§ê∞ˇ)ou must balance a call to ï°dONLNdΩ§ˇ∞5)o    PrOpenDocï°dONLNdΔ§5∞w)6 with a call to ï°dONLNd÷§w∞≥)B
  3668. PrCloseDocï°dONLNd‡§≥∞∂)<.ˇΔ@ˇ ˇˇˇˇ@
  3669. ˇ·ˇ‚7^
  3670. 4*\˜, Palatino
  3671. .+l"CHAPTER €`)\1,     Helvetica
  3672.     (@lThe Printing Manager4⁄*˙¯
  3673. (‡*1 )-c)48
  3674.     )9    Reference
  3675. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3676. °dONLNd\*eQ(c*ASSEMBLfl°dONLNd\Pe≤)&Y LANGUAGE INFORMAðdONLNd\≤e«)bTION
  3677. .°dONLNdklwÑ(tlThe rR`°dONLNd#kÑwË)outine selector for the ,
  3678. CourierR`°dONLNd;kËw)d    PrOpenDocR`°dONLNdDkwÖ)6 function is $04000C00. 
  3679.     .°dONLNd]{lÜq(ÉlTÄ–°dONLNd^{qÜú)    rap macro°dONLNdi{¸Ü)ãTÄ–°dONLNdj{Ü)rap
  3680. .°dONLNdnâlïñ(íl_PrGlue.°dONLNdwâ¸ï)ê$A8FD
  3681. °dONLNd}Ø*∏Q(∂*SEE ALSO
  3682. °dONLNdÜæl +B'For an example of a printing loop, see ·°dONLNd≠æ C)© Listing 1-1å °dONLNd∏æD É)/ beginning on `°dONLNdΔæÑ §)@page 1-6 °dONLNdÕæ§ Æ) 126 °dONLNdœæÆ ≥)
  3683. . 
  3684. ˙*¯4˚*¯ ˚*˚˛
  3685. ˇ·ˇ‚7^
  3686. °dONLNd”Ì*˚m(˜* PrCloseDoc $°dONLNdfiÌn˚q)D ˇˇˇˇˇˇ(˜Ú1
  3687. .°dONLNd‡ lë(lUse the °dONLNdË ëÕ)%
  3688. PrCloseDoc°dONLNdÚ ÕŸ)< prR`°dONLNdı Ÿˆ) ocedur$¿°dONLNd˚ ˆY)e to close the printing $¿°dONLNd Yâ)cgrafPort$¿°dONLNd âΩ)0  data type. °dONLNd($l0b(-l)PROCEDURE PrCloseDoc (pPrPort: TPPrPort);°dONLNdR<lHñ*pPrPort°dONLNdZ<ÆH∂)BAÛ`°dONLNd[<µH) pointer to the printing Û`°dONLNdt<HN)igrafPortÛ`°dONLNd|<NHÇ)0  data type. 
  3689. .°dONLNdâb*kc(i* DESCRIPTION
  3690. .°dONLNdïql}Ì+BFor immediate printing, the °dONLNd±qÌ}))Å
  3691. PrCloseDoc°dONLNdªq)}5)< prR`°dONLNdæq5}R) ocedur$¿°dONLNdƒqR}∑)e ends the printing job.°dONLNd›Élèô(ål
  3692. For deferrR`°dONLNdÁÉôè–)-
  3693. ed printing, R`°dONLNdÙÉ–è )7
  3694. PrCloseDocR`°dONLNd˛É èfi)<. ends the deferment: the document must now be °dONLNd,èlõ¨(òlprinted. BeforR`°dONLNd:è¨õA)@"e printing the document, call the R`°dONLNd\èAõk)ïPrErrorR`°dONLNdcèkõw)* pr$¿°dONLNdfèwõî) ocedur˜ °dONLNdlèìõ¨)e to fi˜ °dONLNdsè¨õÛ)nd out whether .°dONLNdÇõlßú(§lDspooling succeeded. If it did, unload unused code segments  to ensur¿°dONLNdΔõùßÔ(§ùe that you have as .°dONLNdŸßl≥l(∞l8much memory as possible in which to print and then call °dONLNdßl≥¢(∞l    PrPicFile°dONLNdߢ≥ß)6. 
  3695. .°dONLNdÕ*÷Q(‘*ASSEMBLfl°dONLNd$ÕP÷≤)&Y LANGUAGE INFORMAðdONLNd6Õ≤÷«)bTION
  3696. .°dONLNd;‹lËÑ(ÂlThe rR`°dONLNd@‹ÑËË)outine selector for the R`°dONLNdX‹ËË$)d
  3697. PrCloseDocR`°dONLNdb‹$Ë0)< pr$¿°dONLNde‹0ËM) ocedur˜ °dONLNdk‹LËê)e is $08000484. 
  3698.     .°dONLNd|Ïl˜q(ÙlTÄ–°dONLNd}Ïq˜ú)    rap macro°dONLNdàϸ˜)ãTÄ–°dONLNdâϘ)rap
  3699. .°dONLNdç˙lñ(l_PrGlue.°dONLNdñ˙¸)ê$A8FD
  3700. °dONLNdú *)Q('*SEE ALSO
  3701. °dONLNd•/l;+B'For an example of a printing loop, see ·°dONLNdÃ/;C)© Listing 1-1å °dONLNd◊/D;É)/ beginning on `°dONLNdÂ/Ñ;§)@page 1-6 °dONLNdÏ/§;Æ) 126 °dONLNdÓ/Æ;≥)
  3702. . 
  3703. k*s¯4l*s¯ l*l˛
  3704. ˇ·ˇ‚7^
  3705. °dONLNdÚ^*lq(h* PrOpenPage &¿°dONLNd˝^rlu)H ˇˇˇˇˇˇ(hÚ1
  3706. .°dONLNdˇ}lâë(ÜlUse the °dONLNd}ëâÕ)%
  3707. PrOpenPage°dONLNd}ÕâŸ)< prR`°dONLNd}Ÿâˆ) ocedur$¿°dONLNd}ˆâY)e to begin a new page. °dONLNd2ïl°⁄(ûl=PROCEDURE PrOpenPage (pPrPort: TPPrPort; pPageFrame: TPRect);°dONLNdp≠lπñ*pPrPort°dONLNdx≠Æπ∂)BAÛ`°dONLNdy≠µπ) pointer to the printing Û`°dONLNdí≠πN)igrafPortÛ`°dONLNdö≠NπS)0. ˇv@ˇ ˇˇˇˇ@
  3708. ˇ·ˇ‚7^
  3709. 4H\, Palatino
  3710. .+ä"CHAPTER €`)\1,     Helvetica
  3711.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3712. ~¿(‡1
  3713. ‡)-a¿)49
  3714. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  3715. Courier
  3716. .°dONLNd\ähΔ(eä
  3717. pPageFrame.°dONLNd \Ãh¯)B
  3718. For deferr±¿°dONLNd\¯ho),ed printing, a pointer to a r˝¿°dONLNd2\oh·)wectangle to be used as the °dONLNdMhÃt(qÃQuickDraw pictur:‡°dONLNd]ht|)Qe frame for this page. 
  3719. °dONLNduéHóÅ(ïH DESCRIPTION
  3720. °dONLNdÅùä©Ô+BUThe page is printed only if it falls within the page range given in the printing job °dONLNd÷©äµù* subr¿°dONLNd⁄©ûµ∞)ecorÖ °dONLNdfi©∞µª)d. °dONLNd‚ªä«(ƒäIf the user has chosen deferrË °dONLNdˇª«Œ)|.ed printing, the Printing Manager scales the rˆÄ°dONLNd-ªŒ«ı)»    ectangle .°dONLNd6«ä”…(–ä
  3721. named by the °dONLNdC«…”)?
  3722. pPageFrame°dONLNdM«”©)<! parameter (with the QuickDraw prR`°dONLNdn«©”Δ)§ocedur$¿°dONLNdt«Δ”Õ)e $¿°dONLNdv«Õ”) DrawPicture$¿°dONLNdÅ«”)B) °dONLNdÉ”äflÎ(‹äto coincide with the rR`°dONLNdô”Îfl1)aectangle specifiR`°dONLNd©”1flK)Fed by R`°dONLNdØ”Kfli)rPageR`°dONLNd¥”iflÙ)  in the printer information subr$¿°dONLNd‘”Ùfl)ãecor˜ °dONLNdÿ”fl)d. °dONLNd€fläÎâ(Ëä:Unless you want the printout to be scaled, you should set °dONLNdflâÎ≈)ˇ
  3723. pPageFrame°dONLNdfl≈Γ)< to °dONLNd#fl“Ή)
  3724. NIL°dONLNd&fl‰Î)—this ˇˇÖ¥°dONLNd,Îä˜Ø(Ùä    uses the ˇ˛ëãh°dONLNd5ÎØ˜Õ)%rPageˇˇÖ¥ãh°dONLNd:ÎÕ˜“) r„|°dONLNd<Γ˜1)ectangle as the picturF¯°dONLNdRÎ2˜)`5e frame, so that the page is printed with no scaling.°dONLNdà˝ä    ë(äYï°dONLNdâ˝ê    )ou must balance every call to ï°dONLNdß˝    O)É
  3725. PrOpenPageï°dONLNd±˝O    ë)< with a call to ï°dONLNd¡˝ë    ”)B PrClosePageï°dONLNdÃ˝”    ÿ)B. 
  3726. .°dONLNdœ#H,j(*HSPECIALİdONLNd÷#k,ü)#
  3727.  CONSIDERAİdONLNd‡#û,∏)3TIONS
  3728. ˇˇià.°dONLNdÊ2ä>√(;ä
  3729. The printing ˇ˛<òS°dONLNdÛ2ƒ>Ù):grafPortˇˇiàS°dONLNd˚2Ù>7)0 is completely rb°dONLNd 27>|)Ceinitialized by ˇ˛<ò5°dONLNd2}>π)F
  3730. PrOpenPageˇˇià5°dONLNd%2π>”)<. Therq°dONLNd+2”>Â)eforC`°dONLNd/2Â>) e, you must °dONLNd;>äJô(Gäset °dONLNd?>ôJ…)grafPort°dONLNdG>…JÁ)0 featurR`°dONLNdN>ÁJ)Aes such as the font family and font size for every page that you .°dONLNdèJäV¸(Sädraw after you call this pr‡°dONLNd™J˝V)socedurú °dONLNd∞JV")e..°dONLNd≥\äh((eä"Don’t call the QuickDraw function °dONLNd’\(hj)û OpenPicture°dONLNd‡\jh)B' while a page is open (after a call to °dONLNdhätΔ(qä
  3731. PrOpenPage°dONLNdhΔtÔ)<
  3732.  but beforR`°dONLNdhÔt))
  3733. e calling R`°dONLNd%htZ)) PrClosePageR`°dONLNd0hZtc)B). $¿°dONLNd3hctj)    Y9¿°dONLNd4hit±)ou can, however|`°dONLNdCh∞t…)G, call |`°dONLNdJh…t ) DrawPicture|`°dONLNdUh t
  3734. )B .°dONLNdVtäÄΩ(}ä at any time.
  3735. °dONLNdcöH£o(°HASSEMBLfl°dONLNdjön£–)&Y LANGUAGE INFORMAðdONLNd|ö–£Â)bTION
  3736. .°dONLNdũ䵢(≤äThe rR`°dONLNdÜ©¢µ)outine selector for the R`°dONLNdû©µB)d
  3737. PrOpenPageR`°dONLNd®©BµN)< pr$¿°dONLNd´©Nµk) ocedur˜ °dONLNd±©jµÆ)e is $10000808. 
  3738.     .°dONLNd¬πäƒè(¡äTÄ–°dONLNd√πèƒ∫)    rap macro°dONLNdŒπƒ)ãTÄ–°dONLNdœπƒ-)rap
  3739. .°dONLNd”«ä”¥(–ä_PrGlue.°dONLNd‹«”9)ê$A8FD
  3740. °dONLNd‚ÌHˆo(ÙHSEE ALSO
  3741. °dONLNdθä3+B'For an example of a printing loop, see ·°dONLNd¸3a)© Listing 1-1å °dONLNd¸b°)/ beginning on `°dONLNd+¸¢¬)@page 1-6 °dONLNd2¸¬Ã) 126 °dONLNd4¸Ã—)
  3742. . 
  3743. 8H@49H@ 9H9
  3744. ˇ·ˇ‚7^
  3745. °dONLNd8+H9è(5H PrClosePage &¿°dONLNdD+ê9ì)H ˇˇˇˇˇˇ(51
  3746. .°dONLNdFJäVØ(SäUse the °dONLNdNJØVÒ)% PrClosePage°dONLNdYJÒV˝)B prR`°dONLNd\J˝V) ocedur$¿°dONLNdbJV3)e to fi$¿°dONLNdiJ3V∞)nish the printing of the curr˜ °dONLNdÜJØV⁄)|
  3747. ent page. °dONLNdëbänÜ(kä*PROCEDURE PrClosePage (pPrPort: TPPrPort);°dONLNdºzäÜ¥*pPrPort°dONLNdƒzÃÜ‘)BAÛ`°dONLNd≈z”Ü<) pointer to the printing Û`°dONLNdfiz<Ül)igrafPortÛ`°dONLNdÊzlÜq)0. ˇJ@ˇ ˇˇˇˇ@
  3748. ˇ·ˇ‚7^
  3749. 4*\˜, Palatino
  3750. .+l"CHAPTER €`)\1,     Helvetica
  3751.     (@lThe Printing Manager4⁄*˙¯
  3752. (‡*1 )-c)50
  3753.     )9    Reference
  3754. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3755. °dONLNd\*ec(c* DESCRIPTION,
  3756. Courier
  3757. .°dONLNd klwÆ+B PrClosePage°dONLNdkÆw])B' tells the Printing Manager that you arR`°dONLNd>k]wh)Øe f"‡°dONLNdAkhw¯)  inished with this page, so that .°dONLNdawlÉ(Äl'the printer driver can do whatever is r7‡°dONLNdàwÉ,)©equirO °dONLNdçw,Éc)
  3758. ed (such as rê °dONLNdöwcÉÎ)7elease temporary memory) for °dONLNd∑Élèé(ålthe curr `°dONLNdøÉèè’)#ent printer in or  °dONLNd–É’èa)Fder to avoid communication dif¿°dONLNdÓÉaèg)åfi"İdONLNdÉgèµ)culties or other pr®`°dONLNdɵèÎ)N oblems that °dONLNdèlõ¿(òlmay cause the user|@°dONLNd!è¡õ)U’s computer to crash. 
  3759. °dONLNd8µ*æQ(º*ASSEMBLfl°dONLNd?µPæ≤)&Y LANGUAGE INFORMAðdONLNdQµ≤æ«)bTION
  3760. .°dONLNdVƒl–Ñ(ÕlThe rR`°dONLNd[ƒÑ–Ë)outine selector for the R`°dONLNdsƒË–*)d PrClosePageR`°dONLNd~ƒ*–6)B pr$¿°dONLNdŃ6–S) ocedur˜ °dONLNdáƒR–ò)e is $1800040C. 
  3761.     .°dONLNdò‘lflq(‹lTÄ–°dONLNdô‘qflú)    rap macro°dONLNd§‘¸fl)ãTÄ–°dONLNd•‘fl)rap
  3762. .°dONLNd©‚lÓñ(Îl_PrGlue.°dONLNd≤‚¸Ó)ê$A8FD
  3763. °dONLNd∏*Q(*SEE ALSO
  3764. °dONLNd¡l#+B'For an example of a printing loop, see ·°dONLNdË#C)© Listing 1-1å °dONLNdÛD#É)/ beginning on `°dONLNdÑ#§)@page 1-6 °dONLNd§#Æ) 126 °dONLNd
  3765. Æ#≥)
  3766. . 
  3767. S*[¯4T*[¯ T*T˛
  3768. ˇ·ˇ‚7^
  3769. °dONLNdF*Ta(P* PrPicFile  Õ¿°dONLNdFaTd)7 ˇˇˇˇˇˇ(PÚ1
  3770. .°dONLNdelqë(nlUse the °dONLNd#eëq«)%    PrPicFile°dONLNd,e«q”)6 prR`°dONLNd/e”q) ocedur$¿°dONLNd5eqI)e to complete deferr˜ °dONLNdIeHq)X
  3771. ed printing. °dONLNdW}lâÏ(Ül@PROCEDURE PrPicFil (hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: °dONLNd¢ãÍóÚ+~,Ptr; pDevBuf: Ptr; VAR prStatus: TPrStatus);°dONLNdœ£lØê(¨lhPrint.°dONLNd÷£ÆØ)BThe handle to the specifi؆°dONLNdÔ£ØC)l
  3772. ed print rJ‡°dONLNd˘£DØV)*ecorø@°dONLNd˝£Vج)d, which may be a new r¿°dONLNd£√Ø’)mecorç °dONLNd£’؈)d or an °dONLNd ØÆªÏ(∏Æexisting one frL@°dONLNd/ØÌª4)?om a document..°dONLNd>ølÀñ(»lpPrPort°dONLNdFøÆÀ∂)BAÛ`°dONLNdGøµÀ) pointer to the printing Û`°dONLNd`øÀN)igrafPortÛ`°dONLNdhøNÀ…)0. This parameter should be Û`°dONLNdÉø…À€){NILÛ`°dONLNdÜø€À‡), ˇˇÊf°dONLNdàÀÆ◊(‘Æwhich means that ˇˇ≥232°dONLNdôÀ◊9)U    PrPicFileˇˇÊf32°dONLNd¢À9◊Δ)6  should allocate a new printing ˇˇ≥2ôñ°dONLNd¬ÀΔ◊ˆ)çgrafPortˇˇÊfôñ°dONLNd Àˆ◊˜)0 .°dONLNdÀ◊Æ„‰(‡Æ
  3773. in the heap. .°dONLNdŸÁlÛê(lpIOBuf.°dONLNd‡ÁÆÛµ)BA∫†°dONLNd·ÁµÛ˚) pointer to an ar8‡°dONLNdÚÁ¸Û—)G.ea of memory to be used as an input/output buf °dONLNd Á—Û›)’fer¿°dONLNd#Á›Û˜) . This .°dONLNd*ÛÆˇ
  3774. (¸Æparameter should be °dONLNd>Û
  3775. ˇ)_NIL°dONLNdAÛˇy), which means that °dONLNdTÛyˇØ)Z    PrPicFile°dONLNd]ÛØˇÙ)6 should use the .°dONLNdmˇÆ ·(Æ
  3776. volume buf]‡°dONLNdwˇ· /)3fer for the spool fi&†°dONLNdãˇ0 Â)O)le’s volume. If you allocate your own bufW†°dONLNd¥ˇÂ Ò)µfer™`°dONLNd∑ˇ ı) , °dONLNdπ Æ&(Æit must be 522 bytes exactly6‡°dONLNd’ &+)x. .°dONLNdÿl'ñ($lpDevBuf°dONLNd‡Æ'∂)BAÛ`°dONLNd·µ'N)" pointer to a device-dependent buf≈¿°dONLNdN'[)ôfer`°dONLNd['÷)
  3777. . This parameter should be `°dONLNd!÷'Ë){NIL`°dONLNd$Ë'Ì), °dONLNd&'Æ3(0Æwhich means that °dONLNd7'39)U    PrPicFile°dONLNd@'93ö)6 should allocate a bufR`°dONLNdV'ö3„)afer in the heap. .°dONLNdh7lCê(@lprStatus°dONLNdq7ÆCµ)BA∫†°dONLNdr7µC˛) printing status r?@°dONLNdÑ7ˇC)Jecor≥†°dONLNdà7C-)d that %İdONLNdè7.CU)    PrPicFile≠İdONLNdò7UC|)'
  3778.  uses to rı °dONLNd¢7|C∫)'eport on its pra °dONLNd±7ªC…)?ogr*¿°dONLNd¥7 C‹)ess: °dONLNdπCÆO¿(LÆcurrذdONLNdΩC¿O )ent page number@°dONLNdÃC O")K, currI@°dONLNd“C"OG)ent copy‡°dONLNd⁄CGOj)%    , or curr°dONLNd„CjOÄ)#ent fiÉ °dONLNdÈCÄOÕ)le being spooled. ôİdONLNd˚CÕO”)MYZ°dONLNd¸C”OÚ)ou can °dONLNdOÆ[_(XÆ)then display this information to the user∂@°dONLNd,O_[w)±. The Ú°dONLNd2Ow[¢)    TPrStatus†°dONLNd;O£[€), data type is °dONLNdI[ÆgÈ(dÆ
  3779. described on °Ä°dONLNdV[Èg    );page 1-–@°dONLNd][    g) 33–@°dONLNd_[g)
  3780. . 
  3781. °dONLNdbÅ*äc(à* DESCRIPTION
  3782. °dONLNdnêlúË+BIf the user has chosen deferrË °dONLNdãêËúÏ)|<ed printing (for example, to get high-quality output on the .°dONLNd«úl®ì(•lImageW¬†°dONLNdÕúí®Å)&6riter printer), your application should normally call ¬†°dONLNdúÅ®∑)Ô    PrPicFile¬†°dONLNd ú∑®“)6 after °dONLNd®l¥®(±l
  3783. PrCloseDoc°dONLNd®®¥´)<.ˇå@ˇ ˇˇˇˇ@
  3784. ˇ·ˇ‚7^
  3785. 4H\, Palatino
  3786. .+ä"CHAPTER €`)\1,     Helvetica
  3787.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3788. ~¿(‡1
  3789. ‡)-a¿)51
  3790. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3791. °dONLNd\Hej(cHSPECIALİdONLNd\keü)#
  3792.  CONSIDERAİdONLNd\ûe∏)3TIONS
  3793. ˇˇÓ∞.°dONLNdkäw§(täBe surA°dONLNdk•w¸)e not to pass, in the ,
  3794. CourierˇˇÃŸ0°dONLNd3k¸w&)WpPrPortˇˇÓ∞Ÿ0°dONLNd:k&wW)*
  3795.  parameter
  3796. İdONLNdDkXw‰)2!, a pointer to the same printing ˇˇÃëP°dONLNdek‰w)ågrafPortˇˇÓ∞ëP°dONLNdmkw)0 ˇˇJX°dONLNdnwäÉü(Ääyou rú∏°dONLNdswüÉÀ)
  3797. eceived frπp°dONLNd}wÀÉŸ),om ˇ˝fl»°dONLNdÄw⁄É)    PrOpenDocˇˇJX»°dONLNdâwÉï)6 . If that port was allocated by ˇ˝fl 0°dONLNd©wïÉÀ)Ö    PrOpenDocˇˇJX 0°dONLNd≤wÀÉ)6 itself (that is, if ˇˇïT°dONLNd«Éäèõ(åäthe ˇ˛ø¸T°dONLNdÀÉúèΔ)pPrPortˇˇïTT°dONLNd“ÉΔè)* parameter to ˇ˛ø¸’P°dONLNd‡Éè9)=    PrOpenDocˇˇïT’P°dONLNdÈÉ9èN)6 was ˇ˛ø¸ˇ¯°dONLNdÓÉNè`)NILˇˇïTˇ¯°dONLNdÒÉ`è)), then ˇ˛ø¸*†°dONLNd˘ÉÄèº) 
  3798. PrCloseDocˇˇïT*†°dONLNdɺè)< will have disposed .°dONLNdèäõ»(òäLof the port, making your pointer to it invalid. Of course, if you earlier prÀ °dONLNdcè»õ(ò» ovided your .°dONLNdoõäßÃ(§äown storage in °dONLNd~õÃß)B    PrOpenDoc°dONLNdáõß)6, therR`°dONLNdçõß9)e’s no r$¿°dONLNdïõ9ß)/eason you can’t use the same storage again for °dONLNdƒßä≥¿(∞ä    PrPicFile°dONLNdÕß¿≥√)6.
  3799. .°dONLNdœÕH÷o(‘HASSEMBLfl°dONLNd÷Õn÷–)&Y LANGUAGE INFORMAðdONLNdËÕ–÷Â)bTION
  3800. .°dONLNdÌ‹äË¢(ÂäThe rR`°dONLNdÚ‹¢Ë)outine selector for the R`°dONLNd
  3801. ‹Ë<)d    PrPicFileR`°dONLNd‹<ËH)6 pr$¿°dONLNd‹HËe) ocedur˜ °dONLNd‹dË®)e is $60051480. 
  3802.     .°dONLNd-Ïä˜è(ÙäTÄ–°dONLNd.Ïè˜∫)    rap macro°dONLNd9Ϙ)ãTÄ–°dONLNd:Ϙ-)rap
  3803. .°dONLNd>˙ä¥(ä_PrGlue.°dONLNdG˙9)ê$A8FD
  3804. *H24+H2 +H+
  3805. ˇ·ˇ‚7^
  3806. °dONLNdMH+≥('HOptimizing Printingˇˇˇˇˇˇ('1
  3807. .°dONLNda2ä>û(;äThe °dONLNde2û>‘)    PrGeneral°dONLNdn2‘>‡)6 prR`°dONLNdq2‡>˝) ocedur$¿°dONLNdw2˝>X)e is a multipurpose r˜ °dONLNdå2W>)Z'outine that allows your application to .°dONLNd≥>äJÂ(Gäachieve the highest ri °dONLNd»>ÂJy)["esolution print output on the curr °dONLNdÍ>zJ©)ï ent printerb@°dONLNdı>®J·)., verify page °dONLNdJäV‰(Säorientation, and incr{†°dONLNdJ‰VÜ)Z#ease performance by avoiding deferrflİdONLNd;JÜV—)¢ed printing. In ori°dONLNdMJ“V    )Lder to select .°dONLNd[Väbi(_ä1which action you want, you pass an opcode in the °dONLNdåVibì)fliOpcode°dONLNdìVìbú)* fi°dONLNdñVúb )     eld of the °dONLNd°V bË).pData°dONLNd¶VËbÍ) °dONLNdßbän„(käparameter of the prR`°dONLNd∫b„n)Yocedur$¿°dONLNd¿bn)e. The $¿°dONLNd«bn<)pData$¿°dONLNdÃb<n⁄)% parameter can point to one of four r˜ °dONLNdÒbŸnÎ)ùecor…İdONLNdıbÎn¸)ds:  °dONLNd˙näzΔ(wä
  3808. TGetRslBlk°dONLNdnΔzÃ)< (°dONLNdnÃzÌ)page 1-°dONLNd
  3809. nÌz˜)!35°dONLNdn˜z)
  3810. ), °dONLNdnz<)    
  3811. TSetRslBlk°dONLNdn<zB)< (°dONLNdnBzc)page 1-°dONLNd%nczm)!37°dONLNd'nmzv)
  3812. ), °dONLNd*nvz∏)     TGetRotnBlk°dONLNd5n∏zæ)B (°dONLNd7næzfl)page 1-°dONLNd>nflzÈ)!38°dONLNd@nÈz)
  3813. ), and °dONLNdGzäÜÃ(Éä TDftBitsBlk°dONLNdRzÃÜ“)B (°dONLNdTz“ÜÛ)page 1-°dONLNd[zÛÜ˝)!38°dONLNd]z˝Ü)
  3814. ). !†°dONLNd`zÜB)    All of these rÙ°dONLNdnzAÜS);ecorΔ`°dONLNdrzSÜi)ds arò¿°dONLNdwziÜ™)e based on the ò¿°dONLNdÜz™Ü⁄)ATGnlDataò¿°dONLNdéz⁄܇)0 rk °dONLNdêz‡ÜÚ)ecor=İdONLNdîzÚܲ)d (=İdONLNdóz˛Ü) page .°dONLNdúÜäíí(èä1-”‡°dONLNdûÜííú)35”‡°dONLNd†ÜúíΔ)
  3815. ), so the fiƒ`°dONLNd¨Ü«í·)+rst thrè °dONLNd≥Ü‚íÙ)ee fiØ °dONLNd∏ÜÙí3)elds of each ar”İdONLNd«Ü3íl)?e identical.    ø†°dONLNd◊Ümío): .°dONLNdŸòä§£(°äBeforR`°dONLNdfiò£§’) e using the R`°dONLNdÍò’§ )2    PrGeneralR`°dONLNdÛò §)6 pr$¿°dONLNdˆò§4) ocedur˜ °dONLNd¸ò3§Ì)(e, you should determine whether the curr…İdONLNd$ò̧˝)∫ent .°dONLNd(§ä∞(≠ä printer driver supports it. See ¥°dONLNdH§∞≤)Ö#“Checking for PrGeneral” on page 1-º‡°dONLNdk§≤∞º)£16º‡°dONLNdm§º∞æ)
  3816. .
  3817. °dONLNdo H”o(—HASSEMBLfl°dONLNdv n”–)&Y LANGUAGE INFORMAðdONLNdà –”Â)bTION
  3818. .°dONLNdçŸä¢(‚äThe rR`°dONLNdퟢÂ)outine selector for the R`°dONLNd™ŸÂ<)d    PrGeneralR`°dONLNd≥Ÿ<ÂH)6 pr$¿°dONLNd∂ŸHÂe) ocedur˜ °dONLNdºŸd®)e is $70070480. 
  3819.     .°dONLNdÕÈäÙè(ÒäTÄ–°dONLNdŒÈèÙ∫)    rap macro°dONLNdŸÈÙ)ãTÄ–°dONLNd⁄ÈÙ-)rap
  3820. .°dONLNdfi˜ä¥(ä_PrGlue.°dONLNdÁ˜9)ê$A8FD
  3821. 3H;44H; 4H4
  3822. ˇ·ˇ‚7^
  3823. °dONLNdÓ&H4é(0H PrGeneral W    ¿°dONLNd˘&è4=)Gith the GetRslDataOp Opcode   
  3824. õ@°dONLNd'=3?)Æ @°dONLNd'@3B) 
  3825. õ@°dONLNd&B4E) ˇˇˇˇˇˇ)Œ1
  3826. .°dONLNdEäQØ(NäUse the °dONLNd#EØQÂ)%    PrGeneral°dONLNd,EÂQÒ)6 prR`°dONLNd/EÒQ) ocedur$¿°dONLNd5EQ\)e with the value $¿°dONLNdFE\Q§)N GetRslDataOp$¿°dONLNdRE§Q«)H     for the $¿°dONLNd[E«QÒ)#iOpcode$¿°dONLNdbEÒQ˙)* fi$¿°dONLNdeE˙Q)    eld of .°dONLNdlQä]{(Zä4the parameter block when you want to determine the r"¿°dONLNd†Q|])Ú esolutions available to the curr±‡°dONLNd¿Q])áent °dONLNdƒ]äi®(fäprintero¿°dONLNdÀ]®i≠). .°dONLNdŒuäÅP(~ä!PROCEDURE PrGeneral (pData: Ptr);°dONLNdçäô®*pData°dONLNdˆçÃô‘)BAÛ`°dONLNd˜ç”ô) pointer to the Û`°dONLNdçôQ)B
  3827. TGetRslBlkÛ`°dONLNdçQôW)< r≈¿°dONLNdçWôi)ecorò °dONLNdçiôu)d (ò °dONLNdçuôñ) page 1-ò °dONLNd!çñô†)!35ò °dONLNd#ç†ô©)
  3828. ). ˇ@ˇ ˇˇˇˇ@
  3829. ˇ·ˇ‚7^
  3830. 4*\˜, Palatino
  3831. .+l"CHAPTER €`)\1,     Helvetica
  3832.     (@lThe Printing Manager4⁄*˙¯
  3833. (‡*1 )-c)52
  3834.     )9    Reference
  3835. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3836. °dONLNd\*ec(c* DESCRIPTION
  3837. .°dONLNd klw +BAfter you call to the ,
  3838. Courier°dONLNd"k w)^    PrGeneral°dONLNd+kw )6 prR`°dONLNd.k w)) ocedur$¿°dONLNd4k)w[) e with the $¿°dONLNd?k[w£)2 GetRslDataOp$¿°dONLNdKk£w€)H
  3839.  opcode, you °dONLNdXwlÉÙ(Älshould check the value in the °dONLNdvwÙÉ)àiError°dONLNd|wÉ!)$ fi°dONLNdw!ÉO)     eld of the °dONLNdäwOÉã).
  3840. TGetRslBlk°dONLNdîwãÉë)< rR`°dONLNdñwëÉ£)ecor$¿°dONLNdöw£ÉÈ)d. The possible °dONLNd™Élèp(ålrR`°dONLNd´Épè¨)esult codes ar$¿°dONLNdπɨèÎ)<e listed below9¿°dONLNd«ÉÍèÔ)>.   °dONLNd…ÉÔèˆ)Y! °dONLNd ÉıèK)ou should also call ! °dONLNdfiÉKèu)VPrError! °dONLNdÂÉuèü)*     (which rÛİdONLNdÓÉûè—)) eturns the r≈‡°dONLNd˙É—èÈ)3esult °dONLNdèlõ(òl(code left by the last Printing Manager rR`°dONLNd(èõî)±outine) after checking the R`°dONLNdCèîõ∏)wiErrorR`°dONLNdIè∏õ¡)$ fiR`°dONLNdLè¡õÏ)     eld, to be .°dONLNdWõlßz(§lsurâ °dONLNdZõzßfl)e that no additional err͇°dONLNdrõflß)eors werı†°dONLNdyõß8)!
  3841. e generated. 
  3842. °dONLNdá¡* D(»*RESULëİdONLNdå¡D h)T CODES
  3843. .°dONLNdî–l‹ä+(noErr.°dONLNdö–¯‹˝)å0°dONLNdú–‹-)No errE†°dONLNd¢–.‹7)or°dONLNd•€lÁ†(‰l    OpNotImpl°dONLNdØ€¯Á˝)å2°dONLNd±€Á–)+Printer driver does not support this opcode
  3844. °dONLNd›*    Q(*SEE ALSO
  3845. .°dONLNdÊl~+BSee °dONLNdÍ~Æ) Listing 1-4°dONLNdıƺ)0 on °dONLNd˘º›)page 1-°dONLNd›Á)!19°dONLNdÁ|)
  3846. " for an example of how to use the °dONLNd$|ƒ)ï GetRslDataOp°dONLNd0ƒÚ)H  opcode to .°dONLNd;l'Ÿ($ldetermine what printer r@°dONLNdS⁄')n
  3847. esolutions arwİdONLNd`'u)8e available for the curr∫ °dONLNdxu'§)c ent printer@°dONLNdɧ'¶)/.
  3848. W*_¯4X*_¯ X*X˛
  3849. ˇ·ˇ‚7^
  3850. °dONLNdÜJ*Xp(T* PrGeneral W    ¿°dONLNdëJqX˘)Gith the SetRslOp Opcode
  3851. ı°dONLNd®K˘W˛)à  ı°dONLNd™K˛W) ˇˇˇˇˇˇ
  3852. )Ù1
  3853. .°dONLNd¨iluë(rlUse the °dONLNd¥iëu«)%    PrGeneral°dONLNdΩi«u”)6 prR`°dONLNd¿i”u) ocedur$¿°dONLNdΔiu>)e with the value $¿°dONLNd◊i>un)NSetRslOp$¿°dONLNdflinuë)0     for the $¿°dONLNdËiëuª)#iOpcode$¿°dONLNdÔiªuƒ)* fi$¿°dONLNdÚiƒuÚ)     eld of the .°dONLNd˝ulÅ/(~l+parameter block  when you want to set the rS°dONLNd(u/Å})√esolution the curr<†°dONLNd:u}Ũ)N ent printerâ¿°dONLNdEu´Å∞).. .°dONLNdHçlô2(ñl!PROCEDURE PrGeneral (pData: Ptr);°dONLNdj•l±ä*pData°dONLNdp•Ʊ∂)BAÛ`°dONLNdq•µ±˜) pointer to the Û`°dONLNdÅ•˜±3)B
  3854. TSetRslBlkÛ`°dONLNdã•3±9)< r≈¿°dONLNdç•9±K)ecorò °dONLNdë•K±W)d (ò °dONLNdî•W±x) page 1-ò °dONLNdõ•x±Ç)!37ò °dONLNdù•DZã)
  3855. ). 
  3856. .°dONLNd°À*‘c(“* DESCRIPTION
  3857. .°dONLNd≠⁄lÊø+BAfter you call the °dONLNd¿⁄øÊı)S    PrGeneral°dONLNd…⁄ıÊ)6 prR`°dONLNdÃ⁄Ê) ocedur$¿°dONLNd“⁄ÊP) e with the $¿°dONLNd›⁄PÊÄ)2SetRslOp$¿°dONLNdÂ⁄ÄÊı)0 opcode, you should check °dONLNdˇÊlÚ∑(Ôlthe value in the °dONLNdÊ∑Ú€)KiError°dONLNdÊ€Ú‰)$ fi°dONLNdʉÚ)     eld of the °dONLNd$ÊÚN).
  3858. TSetRslBlk°dONLNd.ÊNÚT)< rR`°dONLNd0ÊTÚf)ecor$¿°dONLNd4ÊfÚ∞)d. The possible r˜ °dONLNdEÊØÚÎ)Iesult codes ar…İdONLNdSÊÎÚÚ)<e ˇˇïÓ°dONLNdUÚl˛£(˚l listed below*Ó°dONLNdaÚ£˛ß)7. ì<°dONLNdcÚ߲Æ)Y®<°dONLNddÚ≠˛)ou should also call ˇ˛¡ ˇÙ°dONLNdxÚ˛+)TPrErrorˇˇïÓˇÙ°dONLNdÚ+˛T)*     (which r˛0°dONLNdàÚT˛Ü)) eturns the r¸l°dONLNdîÚܲ˜)2esult code left by the last ˇˇœ®°dONLNd∞˛l
  3859. ¿(lPrinting Manager rÒ∞°dONLNd¬˛¿
  3860. 6)Toutine) after checking the ˇˇn¯0P°dONLNd›˛7
  3861. [)wiErrorˇˇœ®0P°dONLNd„˛[
  3862. c)$ fiˇ¯°dONLNdÊ˛c
  3863. ö)eld, to be surAP°dONLNdÙ˛õ
  3864. ¯)8e that no additional .°dONLNd    
  3865. lx(lerr@°dONLNd 
  3866. yö)
  3867. ors wer °dONLNd
  3868. ö“)!
  3869. e generated. 
  3870. °dONLNd!0*9D(7*RESULëİdONLNd&0D9h)T CODES
  3871. .°dONLNd.?lKä+(noErr.°dONLNd4?¯K˝)å0°dONLNd6?K-)No errE†°dONLNd<?.K7)or.°dONLNd?JlV¢(Sl    NoSuchRsl.°dONLNdIJ¯V˝)å1°dONLNdKJVE) Requested r @°dONLNdVJFV–)5esolution not supported by the °dONLNdxUa#(^currذdONLNd|U#aÄ)ently selected printer°dONLNdì`ll†(il    OpNotImpl°dONLNdù`¯l˝)å2°dONLNdü`l–)+Printer driver does not support this opcode
  3872. °dONLNdÀÖ*éQ(å*SEE ALSO
  3873. .°dONLNd‘îl†~+BSee °dONLNdÿî~†Æ) Listing 1-4°dONLNd„îÆ†º)0 on °dONLNdÁ›)page 1-°dONLNdÓÁ)!19°dONLNdîÁ†|)
  3874. " for an example of how to use the °dONLNdî|†¨)ïSetRslOp°dONLNdÈ)0 opcode to set .°dONLNd)†l¨Ä(©lthe r¢`°dONLNd.†Ä¨›)esolution for the curr»°dONLNdD†›¨ )] ent printer °dONLNdO† ¨)/.ˇû@ˇ ˇˇˇˇ@
  3875. ˇ·ˇ‚7^
  3876. 4H\, Palatino
  3877. .+ä"CHAPTER €`)\1,     Helvetica
  3878.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3879. ~¿(‡1
  3880. ‡)-a¿)53
  3881. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3882. jHq4jHq jHj
  3883. ˇ·ˇ‚7^
  3884. °dONLNd\Hjé(fH PrGeneral W    ¿°dONLNd \èj&)Gith the GetRotnOp Opcode 
  3885. KİdONLNd$]&i()ó ÀİdONLNd%](i*) 
  3886. KİdONLNd&\+j.) ˇˇˇˇˇˇ)Â1
  3887. .°dONLNd({äáØ(ÑäUse the ,
  3888. Courier°dONLNd0{ØáÂ)%    PrGeneral°dONLNd9{ÂáÒ)6 prR`°dONLNd<{Òá) ocedur$¿°dONLNdB{á\)e with the value $¿°dONLNdS{\áí)N    GetRotnOp$¿°dONLNd\{íáµ)6     for the $¿°dONLNde{µáfl)#iOpcode$¿°dONLNdl{fláË)* fi$¿°dONLNdo{Ëá)     eld of the .°dONLNdzáäìÈ(êäMparameter block  when you want to determine if the user has chosen landscape °dONLNd«ìäü#* %orientation in the style dialog box. .°dONLNdÌ´ä∑P*!PROCEDURE PrGeneral (pData: Ptr);°dONLNd√䜮*pData°dONLNd√Ü‘)BAÛ`°dONLNd√”œ ) pointer to a Û`°dONLNd$√ œM)8 TGetRotnBlkÛ`°dONLNd/√MœS)B r≈¿°dONLNd1√Sœe)ecorò °dONLNd5√eœq)d (ò °dONLNd8√qœí) page 1-ò °dONLNd?√íœú)!38ò °dONLNdA√úœ•)
  3889. ). 
  3890. .°dONLNdEÈHÚÅ(H DESCRIPTION
  3891. .°dONLNdQ¯ä›+BAfter you call the °dONLNdd¯›)S    PrGeneral°dONLNdm¯)6 prR`°dONLNdp¯<) ocedur$¿°dONLNdv¯<n) e with the $¿°dONLNdůn§)2    GetRotnOp$¿°dONLNd䯧˝)6 opcode, you should °dONLNdûäÒ(
  3892. ächeck the value in the °dONLNdµÒ)giError°dONLNdª)$ fi°dONLNdæL)     eld of the °dONLNd…Lé). TGetRotnBlk°dONLNd‘éî)B rR`°dONLNd÷î¶)ecor$¿°dONLNd⁄¶)d. The possible r˜ °dONLNdÎÔ)Iesult °dONLNdÒäÆ(äcodes arR`°dONLNd˘ÆÌ)$e listed belowg`°dONLNdÏÒ)>. 9¿°dONLNd    Ò¯)YN¿°dONLNd
  3893. ˜M)ou should also call N¿°dONLNdMw)VPrErrorN¿°dONLNd%w°)*     (which r! °dONLNd.°‘)* eturns the rÛİdONLNd:”)2esult code left ˇˇÂ¥°dONLNdJä((%äby the last Printing Manager rŒ‰°dONLNdh(á)áoutine) after checking the ˇˇ±e¥°dONLNdÉà(¨)wiErrorˇˇÂ¥e¥°dONLNdâ¨(¥)$ fiKh°dONLNdåµ(Ï)    eld, to be surŒ‰°dONLNdöÏ()7
  3894. e that no .°dONLNd§(ä4Δ(1äadditional err˚ °dONLNd≤(Δ4Á)<ors wer‡°dONLNdπ(Ë4 )"
  3895. e generated. 
  3896. °dONLNd«NHWb(UHRESULëİdONLNdÃNbWÜ)T CODES
  3897. .°dONLNd‘]äi®+(noErr.°dONLNd⁄]i)å0°dONLNd‹]/iK)No errE†°dONLNd‚]LiU)or°dONLNdÂhätæ(qä    OpNotImpl°dONLNdÔht)å2°dONLNdÒh/tÓ)+Printer driver does not support this opcode
  3898. °dONLNdçHño(îHSEE ALSO
  3899. .°dONLNd&úä®ú+BSee °dONLNd*úú®Ã) Listing 1-5°dONLNd5úî⁄)0 on °dONLNd9ú⁄®˚)page 1-°dONLNd@ú˚®)!21°dONLNdBú®Ç)
  3900.  for an example of using the °dONLNd_úÇ®∏)}    GetRotnOp°dONLNdhú∏®Ê)6  opcode to .°dONLNds®ä¥Å(±ä9determine if the user has selected landscape orientation.
  3901. ‰HÏ4ÂHÏ ÂHÂ
  3902. ˇ·ˇ‚7^
  3903. °dONLNdÆ◊HÂé(·H PrGeneral W    ¿°dONLNdπ◊èÂû)G.ith the DraftBitsOp and NoDraftBitsOp Opcodes 
  3904. ʰdONLNdÁÿû‰†(·û f°dONLNdËÿ°‰£) 
  3905. ʰdONLNdÈ◊£Â¶) ʰdONLNdÍ◊¶Â©) ˇˇˇˇˇˇ)j1
  3906. .°dONLNdψäØ(ˇäUse the °dONLNdÙˆØÂ)%    PrGeneral°dONLNd˝ˆÂÒ)6 prR`°dONLNdˆÒ) ocedur$¿°dONLNdˆ\)e with the value $¿°dONLNdˆ\û)N DraftBitsOp$¿°dONLNd"ˆû¡)B     for the $¿°dONLNd+ˆ¡Î)#iOpcode$¿°dONLNd2ˆÎÙ)* fi$¿°dONLNd5ˆÙ)    eld of .°dONLNd<äD( ä(the parameter block when you want to for”`°dONLNddDΔ)∫ce draft-quality printing. The .°dONLNdÉäÿ(ä
  3907. NoDraftBitsOp°dONLNdêÿ¥)N3 opcode cancels the use of draft-quality printing. °dONLNdƒ&ä2P(/ä!PROCEDURE PrGeneral (pData: Ptr);°dONLNdÊ>äJ®*pData°dONLNdÏ>ÃJ‘)BAÛ`°dONLNdÌ>”J ) pointer to a Û`°dONLNd˚> JM)8 TDftBitsBlkÛ`°dONLNd>MJS)B r≈¿°dONLNd>SJe)ecorò °dONLNd >eJq)d (ò °dONLNd>qJí) page 1-ò °dONLNd>íJú)!38ò °dONLNd>úJ•)
  3908. ). 
  3909. .°dONLNddHmÅ(kH DESCRIPTION
  3910. .°dONLNd(sä›+BAfter you call the °dONLNd;s›)S    PrGeneral°dONLNdDs)6 prR`°dONLNdGs<) ocedur$¿°dONLNdMs<n) e with the $¿°dONLNdXsn∞)2 DraftBitsOp$¿°dONLNdcs∞    )B opcode, you should °dONLNdwäãÒ(àächeck the value in the °dONLNdéÒã)giError°dONLNdîã)$ fi°dONLNdóãL)     eld of the °dONLNd¢Lãé). TDftBitsBlk°dONLNd≠éãî)B rR`°dONLNdØîã¶)ecor$¿°dONLNd≥¶ã)d. The possible r˜ °dONLNdƒÔã)Iesult °dONLNd ãäóÆ(îäcodes arR`°dONLNd“ãÆóÌ)$e listed belowg`°dONLNd‡ãÏóÒ)>. 9¿°dONLNd‚ãÒó¯)YN¿°dONLNd„ã˜óM)ou should also call N¿°dONLNd˜ãMów)VPrErrorN¿°dONLNd˛ãwó°)*     (which r! °dONLNdã°ó‘)* eturns the rÛİdONLNdã”ó)2esult code left ˇˇÂ¥°dONLNd#óä£(†äby the last Printing Manager rŒ‰°dONLNdAó£á)áoutine) after checking the ˇˇ±e¥°dONLNd\óࣨ)wiErrorˇˇÂ¥e¥°dONLNdb󨣥)$ fiKh°dONLNdeóµ£Ï)    eld, to be surŒ‰°dONLNdsóÏ£)7
  3911. e that no .°dONLNd}£äØΔ(¨äadditional err˚ °dONLNdã£ΔØÁ)<ors wer‡°dONLNdí£ËØ )"
  3912. e generated. ˇÜ@ˇ ˇˇˇˇ@
  3913. ˇ·ˇ‚7^
  3914. 4*\˜, Palatino
  3915. .+l"CHAPTER €`)\1,     Helvetica
  3916.     (@lThe Printing Manager4⁄*˙¯
  3917. (‡*1 )-c)54
  3918.     )9    Reference
  3919. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3920. °dONLNd\*eD(c*RESULëİdONLNd\Deh)T CODES,
  3921. Courier
  3922. .°dONLNd
  3923. klwä+(noErr.°dONLNdk¯w˝)å0°dONLNdkw-)No errE†°dONLNdk.w7)or°dONLNdvldž(l    OpNotImpl°dONLNd(v¯Ç˝)å2°dONLNd*vÇ–)+Printer driver does not support this opcode
  3924. °dONLNdVõ*§Q(¢*SEE ALSO
  3925. °dONLNd_™l∂}+BSee ”°dONLNdc™}∂G),“Choosing Draft-Quality Printing” on page 1-`°dONLNdè™H∂R)À21`°dONLNdë™R∂u)
  3926.  for morǰdONLNdô™u∂Ô)#e information on using  the .°dONLNdµ∂l¬Æ(øl DraftBitsOp°dONLNd¿∂Ƭ√)B and °dONLNd≈∂√¬)
  3927. NoDraftBitsOp°dONLNd“∂¬P)N opcodes to forR`°dONLNd·∂P¬È)?&ce the use of or to cancel the use of .°dONLNd¬lŒÕ(Àldraft-quality printing.
  3928. Ú*˙¯4Û*˙¯ Û*Û˛
  3929. ˇ·ˇ‚7^
  3930. °dONLNdÂ*Û:(Ô*Err@°dONLNd"Â;Û|) or Handlingˇˇˇˇˇˇ(ÔÚ1
  3931. .°dONLNd.˙lÄ(lThe °dONLNd2˙Ä™)PrError°dONLNd9˙™÷)*  function rR`°dONLNdD˙÷    ), eturns the r$¿°dONLNdP˙    “)3.esult code left by the last Printing Manager r˜ °dONLNd~˙—Ú)»outine. °dONLNdÜlÄ(lThe °dONLNdäĺ)
  3932. PrSetError°dONLNd)< prR`°dONLNdó»Â) ocedur$¿°dONLNdùÂ|)$e lets you set the value of the curr˜ °dONLNd¡{È)ñent Printing Manager err…İdONLNdŸÈÚ)nor  °dONLNd€Ú˜)    . 
  3933. B*J¯4C*J¯ C*C˛
  3934. ˇ·ˇ‚7^
  3935. .°dONLNdfl5*CT(?*PrError ¿°dONLNdÁ5UCX)+ ˇˇˇˇˇˇ(?Ú1
  3936. °dONLNdÈTl`r(]lY@İdONLNdÍTr`∂)ou can get the r<@°dONLNd˙T∂`Ë)D esult code r‡°dONLNdTÈ`í)3&eturned by the last Printing Manager rµÄ°dONLNd,Tí`∏)©    outine frê¿°dONLNd5T∏`Ÿ)&om the .°dONLNd<`llñ(ilPrError°dONLNdC`ñl¡)*  function. °dONLNdOxlÑ(ÅlFUNCTION PrError: Integer;
  3937. .°dONLNdj†*©c(ß* DESCRIPTION
  3938. °dONLNdvØlªè+B    If an errÖ°dONLNdØèªÊ)#Mor that does not belong to the Printing Manager occurs, the Printing Manager .°dONLNdêl«÷(ƒlputs it into low memoryd@°dONLNd„ª’«Ú)i, wher6†°dONLNdȪګ$)
  3939. e it can be r    °dONLNdˆª$«ç)2etrieved with a call to     °dONLNdªç«∑)iPrErrorK†°dONLNdª∂«Â)) , and then .°dONLNd «l” (–l*terminates the printing loop, if necessary3 °dONLNdJ« ”ç)¥.  If you encounter an err¿°dONLNdd«ç”È)mor in the middle of a °dONLNdz”lfl(‹l&printing loop, do not end printing abrÄİdONLNd†”fln)ßuptly; call the close r{¿°dONLNd∑”nflœ)[outines for any open rÔ@°dONLNdÕ”œflÒ)aoutines °dONLNd’fllΣ(Ël you have alrz`°dONLNd·fl£Îè)73eady made and let the Printing Manager terminate prô‡°dONLNdflèδ)Ïoperly)İdONLNdfl´ÎÈ). The Printing °dONLNd)Îl˜ö(Ùl    Manager rW°dONLNd2Îö˜&). eturns the following general errH°dONLNdRÎ&˜8)åors: 
  3940.     °dONLNdXlÑ( lName°dONLNd^¸0)ê Result Code°dONLNdknü)r Description
  3941. .°dONLNdwlú(liPrAbort.°dONLNdŸ )ê128°dONLNdÖn√)rApplication or user°dONLNdún*q* rE°dONLNdùr*∑)equested cancel.°dONLNd≠.l:ä(7lnoErr.°dONLNd¥.¸:)ê0°dONLNd∂.n:ä)rNo errE†°dONLNdº.ã:î)or.°dONLNdø>lJ®(Gl
  3942. iPrSavPFil.°dONLNdÀ>¸J)ê–1°dONLNdŒ>nJ≠)rSaving print fi¨Ä°dONLNd›>≠J¥)?le.°dONLNd‡NlZ®(Wl
  3943. controlErr.°dONLNdÏN¸Z )ê–17°dONLNdNnZ–)rUnimplemented contr^`°dONLNdN–Zÿ)bol°dONLNd    ZnfÇ(cninstró¿°dONLNdZÇf¢)uctions.°dONLNdjlvú(sliIOAbort.°dONLNd j¸v )ê–27°dONLNd$jnvé)rI/O err ‡°dONLNd+jévó) or.°dONLNd.zlÜÆ(Él iMemFullErr.°dONLNd;z¸Ü)ê–108°dONLNd@znÜ©)r Not enough r√‡°dONLNdLz©Üÿ);
  3944. oom in the°dONLNdZÜníõ(èn    heap zone.°dONLNddñl¢Æ(ül resNotFound.°dONLNdqñ¸¢)ê–192°dONLNdvñn¢Ì)rThe printer does not support.°dONLNdñ¢nÆÄ* the °dONLNdö¢ÄÆ∂)    PrGeneral°dONLNd£¢∂Ƭ)6 prR`°dONLNd¶¢¬Æfl) ocedur$¿°dONLNd¨¢flƉ)e°dONLNdÆ¥l¿–(ΩlThe Device Manager rR`°dONLNd¬¥–¿ˇ)d eturns the R`°dONLNdÕ¥ˇ¿;)/
  3945. controlErrR`°dONLNd◊¥;¿A)< r$¿°dONLNdŸ¥A¿r) esult code. ˇ‚@ˇ ˇˇˇˇ@
  3946. ˇ·ˇ‚7^
  3947. 4H\, Palatino
  3948. .+ä"CHAPTER €`)\1,     Helvetica
  3949.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  3950. ~¿(‡1
  3951. ‡)-a¿)55
  3952. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  3953. °dONLNd\ähŒ(eäThe following r∞@°dONLNd\Œh
  3954. )Desult codes arµ‡°dONLNd\
  3955. h-)<e specifim†°dONLNd&\.hr)$c to the LaserWJ¿°dONLNd5\rh«)Driter printer family:
  3956.     °dONLNdKuäÄæ(}ä Result Code°dONLNdWuΔĘ)< Description
  3957. °dONLNdcÉäè£(åä–8133°dONLNdiÉΔè)<PostScript errO@°dONLNdwÉè*)<    or occurrL °dONLNdÄÉ*èfi)()ed during transmission of data to printer°dONLNd©Éfiè)¥    .  Most  °dONLNd¥èΔõ‡(òΔ>often caused by a bug in the PostScript code being downloaded.°dONLNdÛüä´£(®ä–8132°dONLNd˘üΔ´Ã)<T °dONLNd˙üô
  3958. )
  3959. imeout occurṙ°dONLNdü    ´ù)=ed (no communication has occurr¡†°dONLNd&üù´)îed with the printer for °dONLNd@´Δ∑](¥Δ"2 minutes.  Usually caused by extrÛ@°dONLNdb´]∑Õ)óemely long imaging time.°dONLNd{ªä«£(ƒä–8131°dONLNdÅªΔ«¸)<
  3960. Printer not rLJ°dONLNd骸«¶)6%esponding; it may have been turned of °dONLNd≥ªß«‘)´ f.  This errÌ¿°dONLNdøª”«˝),
  3961. or occurs °dONLNdÀ«Δ”(–Δif a user turns of¢‡°dONLNd›«”F)H f the LaserW+¿°dONLNdÈ«F”ı)8+riter printer in the middle of a print job.°dONLNd◊ä„£(‡ä–4101°dONLNd◊Δ„?)<Printer not found or closed.°dONLNd8ÁäÛ£(ä–4100°dONLNd>ÁΔÛ)<Connection closed.°dONLNdQ˜ä£(ä–4099°dONLNdW˜Δ–)<W¬†°dONLNdX˜œ‰)    rite rÓ†°dONLNd^˜‰$)equest too big.°dONLNdnä£(ä–4098°dONLNdtΔ˜)< Request alr@°dONLNd¯,)2 eady active.°dONLNdåä#£( ä–4097°dONLNdíΔ#)<Bad connection r∞İdONLNd¢#/)Jefnum.°dONLNd©'ä3£(0ä–4096°dONLNdØ'Δ3›)<No fr›@°dONLNd¥'›3))ee Connect ContrÅ@°dONLNdƒ'*3ù)Mol Blocks (CCBs) available.°dONLNdfl9äEî(BäIf ,
  3962. Courier°dONLNd‚9îEæ)
  3963. PrError°dONLNdÈ9æEƒ)* rR`°dONLNdÎ9ƒE·)eturns R`°dONLNdÚ9·E#) resNotFoundR`°dONLNd˝9#Ev)B after you call the R`°dONLNd9vE¨)S    PrGeneralR`°dONLNd9¨E∏)6 pr$¿°dONLNd9∏E’) ocedur˜ °dONLNd#9‘E) e, the curr…İdONLNd.9E)-ent °dONLNd2EäQ'(Nä$printer driver does not support the °dONLNdVE'Q])ù    PrGeneral°dONLNd_E]Qi)6 prR`°dONLNdbEiQÜ) ocedur$¿°dONLNdhEÜQê)e. ˜ °dONLNdkEèQñ)    Y  °dONLNdlEñQ˛)ou should clear this errfiİdONLNdÑE˝Q)gor °dONLNdáQä]‹(Zäwith a call to the °dONLNdöQ‹])R
  3964. PrSetError°dONLNd§Q]$)< prR`°dONLNdßQ$]A) ocedur$¿°dONLNd≠QA]Ê)%e, with a parameter of 0; otherwise, $¿°dONLNd“QÊ])•PrError$¿°dONLNdŸQ])* .°dONLNd⁄]äi¸(fämight still contain this errÖ`°dONLNdˆ]¸ip)ror next time you check it.  .°dONLNduäÅŸ(~äThe following errR`°dONLNd$uŸÅÚ)Oors ar$¿°dONLNd*uÚÅ)e specifi$¿°dONLNd3uÅ8)%c to the$¿°dONLNd;u8Ån)!    PrGeneral$¿°dONLNdDunÅz)6 pr˜ °dONLNdGuyÅñ) ocedur…İdONLNdMuñÅû)e:
  3965.     .°dONLNdPéäô¢(ñäName°dONLNdVéôN)ê Result Code°dONLNdcéåôΩ)r Description
  3966. .°dONLNdoú䮿(•ä    NoSuchRsl.°dONLNdzú®)ê1°dONLNd|ú宿)r Requested r @°dONLNdáú¡®)5esolution is not °dONLNdú®å¥π(±å    supported.°dONLNd¶∏䃿(¡ä    OpNotImpl.°dONLNd±∏ƒ)ê2.°dONLNd≥∏僺)r
  3967. Requested °dONLNdΩ∏ºƒÚ)0    PrGeneral°dONLNdΔ∏ÚƒÙ)6 .°dONLNdÀƒå–(Õåopcode not implemented in °dONLNdÈ–å‹Æ* the curr `°dONLNdÒ–Ø‹˚)#ent printer driver2¿°dONLNd–˚‹˝)L..°dONLNd‡äÏÃ(Èä resNotfound.°dONLNd‡Ï.)ê–192°dONLNd‡åϱ)rThe currÍ¿°dONLNd‡±Ï)%ent printer driver .°dONLNd6Ïå¯÷(ıådoes not support °dONLNdGÏ÷¯ )J    PrGeneral°dONLNdPÏ ¯)6..°dONLNdR˛ä
  3968. Î(äThe most common err⁄İdONLNde˛Î
  3969. #)a or encounterχ°dONLNdq˛#
  3970. Ê)8,ed is –4101, which is generated if no LaserWÿ@°dONLNdù˛Ê
  3971. ˚)√riter °dONLNd£
  3972. ä(ä$printer is selected.  Since this err‡°dONLNd«
  3973. )è;or is so common, it is a good idea to display a dialog box °dONLNdä"ç(ärE°dONLNdé"7))equesting the user to select a printer frᆰdONLNd,7"∫)©om the Chooser when this errx‡°dONLNdH∫"˚)Éor is encounter0†°dONLNdW¸"    )Bed.
  3974. °dONLNd[<HEo(CHASSEMBLfl°dONLNdb<nE–)&Y LANGUAGE INFORMAðdONLNdt<–EÂ)bTION
  3975. .°dONLNdyKäW¢(TäThe rR`°dONLNd~K¢W)outine selector for the R`°dONLNdñKW0)dPrErrorR`°dONLNdùK0Wö)* function is $BA000000. 
  3976.     .°dONLNd∂[äfè(cäTÄ–°dONLNd∑[èf∫)    rap macro°dONLNd¬[f=)ãSelector
  3977. .°dONLNdÀiäu¥(rä_PrGlue.°dONLNd‘iu9)ê$A8FD
  3978. °dONLNd⁄èHòo(ñHSEE ALSO
  3979. °dONLNd„ûä™Õ+BSee the section ò‡°dONLNdÛûÕ™3)C“Handling Printing Err@°dONLNd    û4™w)gors” on page 1-8°dONLNdûw™Å)C288°dONLNdûÅ™§)
  3980.  for morİdONLNd"û•™ )$e information on using .°dONLNd9™ä∂¥(≥äPrError¬†°dONLNd@™≥∂∏)). ˇ@ˇ ˇˇˇˇ@
  3981. ˇ·ˇ‚7^
  3982. 4*\˜, Palatino
  3983. .+l"CHAPTER €`)\1,     Helvetica
  3984.     (@lThe Printing Manager4⁄*˙¯
  3985. (‡*1 )-c)56
  3986.     )9    Reference
  3987. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  3988. j*q¯4j*q¯ j*j˛
  3989. ˇ·ˇ‚7^
  3990. °dONLNd\*ji(f* PrSetError  “İdONLNd \ijl)? ˇˇˇˇˇˇ(fÚ1
  3991. .°dONLNd{lás(ÑlYï°dONLNd{rá±)ou can use the ,
  3992. Courierï°dONLNd{±áÌ)?
  3993. PrSetErrorï°dONLNd({Ìá˘)< prg`°dONLNd+{˘á) ocedur9¿°dONLNd1{áì)e to set the value of the curr  °dONLNdO{ìáŒ)}ent printing rfiİdONLNd]{ÕáÂ):esult .°dONLNdcálìÉ(êlcode..°dONLNdiül´D*$PROCEDURE PrSetError(iErr: Integer);.°dONLNdé∑l√|*iErr°dONLNdì∑Æ√˚)BThe value of the r‡°dONLNd•∑¸√+)N esult code.
  3994. °dONLNd±›*Êc(‰* DESCRIPTION
  3995. .°dONLNdΩÏl¯®+B
  3996. PrSetError°dONLNd«Ï®¯ª)< storR`°dONLNdÃϪ¯Û)
  3997. es the specif"‡°dONLNdŸÏÛ¯è)8#ied value into the global variable "‡°dONLNd¸Ïè¯ø)úPrintErr"‡°dONLNdÏø¯Ÿ)0 wherı@°dONLNd    Ïÿ¯Ò)e the °dONLNd¯lÎ(lPrinting Manager keeps its rR`°dONLNd+¯Î) esult code. $¿°dONLNd7¯#)1Y9¿°dONLNd8¯"O) ou can use 9¿°dONLNdC¯Oã)-
  3998. PrSetError9¿°dONLNdM¯ãÂ)< to cancel a printing .°dONLNdclô(
  3999. l
  4000. operation..°dONLNdnl(z*-If PrError <> noErr THEN PrSetError(iPrAbort)
  4001. .°dONLNdúD*MQ(K*ASSEMBLfl°dONLNd£DPM≤)&Y LANGUAGE INFORMAðdONLNdµD≤M«)bTION
  4002. .°dONLNd∫Sl_Ñ(\lThe rR`°dONLNdøSÑ_Ë)outine selector for the R`°dONLNd◊SË_$)d
  4003. PrSetErrorR`°dONLNd·S$_ã)< function is $C0000200. 
  4004.     .°dONLNd˙clnq(klTÄ–°dONLNd˚cqnú)    rap macro°dONLNdc¸n)ãTÄ–°dONLNdcn)rap
  4005. .°dONLNd ql}ñ(zl_PrGlue.°dONLNdq¸})ê$A8FD
  4006. °*©¯4¢*©¯ ¢*¢˛
  4007. ˇ·ˇ‚7^
  4008. °dONLNdî*¢î(û*Low-Level Routinesˇˇˇˇˇˇ(ûÚ1
  4009. °dONLNd-©lµ&(≤l+In general, you should use the high-level rB°dONLNdX©'µÀ)ª%outines of the Printing Manager in prº@°dONLNd}©Àµ€)§eferh`°dONLNdÅ©‹µÚ)ence °dONLNdܵl¡∑(ælto the low-level rm@°dONLNdòµ∑¡*)Koutines. Low-level calls arv°dONLNd≥µ*¡Ω)s!e not guaranteed to work in futur=‡°dONLNd‘µæ¡¯)îe versions of °dONLNd‚¡lÕø( lthe system softwar´@°dONLNdÙ¡øÕ€)Se in prı¿°dONLNd˚¡€ÕÊ)=ecisely the same manner as they have in past versions of the °dONLNd8ÕlŸç(÷lsoftwar‰¿°dONLNd?Õ矅)!e. Low-level r9¿°dONLNdMÕ Ÿı)=
  4010. outines ar˛ °dONLNdWÕıŸ¬)+1e primarily suited for functions such as text str•°dONLNdàÕ√ŸÊ)Œeaming °dONLNdèŸlÂâ(‚l(the pr¯`°dONLNdñŸâ±)
  4011. ocess of r∞ °dONLNd†Ÿ≤ˆ))eceiving data fr °dONLNd∞Ÿ˜Â")E    om a sour @°dONLNdπŸ"®)+ce and printing it immediately†°dONLNd◊Ÿ®ÂÂ)Ü, without any °dONLNdÂÂlÒÇ(ÓlAintermediate formatting). In addition, if you use the low-level r‰ °dONLNd&ÂÇÒfi(ÓÇoutines and the user °dONLNd;Òl˝ˆ(˙lprints a document on a LaserWÜ`°dONLNdXÒˆ˝*)ä
  4012. riter printerœ¿°dONLNdeÒ)˝`)3 , the LaserWÑ¿°dONLNdqÒ`˝Ó)7$riter printer driver translates all °dONLNdï˝l    ˜(l[low-level calls to the matching high-level ones, so your application does not gain a speed °dONLNd    lü* advantage. 
  4013. "*/¯4#*.¯,
  4014.  
  4015. Zapf Dingbats
  4016. °dONLNdˇˇ()Xs
  4017. °dONLNdˇˇ+WúİdONLNdˇˇ)ARNING
  4018. ˇ·ˇ‚7^
  4019. °dONLNd¸,l8r(5lY@İdONLNd˝,r8\)5ou should not use both the high-level and low-level rè°dONLNd2,\8ö)Íoutines at the °dONLNdA8lDê(AlCsame time (that is, when one or the other interface has opened the °dONLNdÑDlPé* Dprinter driver). The only exception to this is that you may use the .°dONLNd»Pl\®*
  4020. PrDrvrVers°dONLNd“P®\‘)<  function (°dONLNd›P‘\ı),page 1-°dONLNd‰Pı\ˇ)!58°dONLNdÊPˇ\i)
  4021. ) with the high-level rR`°dONLNd˝Pi\å)joutines.
  4022. .R`°dONLNdˇˇ)&s
  4023. ç*ï¯4ç*ç*ç˛
  4024. ˇ·ˇ‚7^
  4025. °dONLNd*çt(â* PrDrvrOpen  &°dONLNd'uçx)K ˇˇˇˇˇˇ(âÚ1
  4026. .°dONLNd)ûl™Ä(ßlThe °dONLNd-ûÄ™º)
  4027. PrDrvrOpen°dONLNd7ûº™»)< prR`°dONLNd:û»™Â) ocedur$¿°dONLNd@û™X)e opens the printer driverg`°dONLNdZûW™`)r, r9¿°dONLNd]û`™œ)    eading it into memory if .°dONLNdv™l∂ñ(≥l    necessary4‡°dONLNd™ñ∂†)*.   ˇ“@ˇ ˇˇˇˇ@
  4028. ˇ·ˇ‚7^
  4029. 4H\, Palatino
  4030. .+ä"CHAPTER €`)\1,     Helvetica
  4031.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  4032. ~¿(‡1
  4033. ‡)-a¿)57
  4034. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  4035. Courier
  4036. .°dONLNd\äh(eäPROCEDURE PrDrvrOpen;
  4037. .°dONLNdÑHçÅ(ãH DESCRIPTION
  4038. .°dONLNd"ìäüØ+BUse the °dONLNd*ìØüÎ)%
  4039. PrDrvrOpen°dONLNd4ìÎü˜)< prR`°dONLNd7ì˜ü) ocedur$¿°dONLNd=ìüF) e with the $¿°dONLNdHìFüà)2 PrDrvrClose$¿°dONLNdSìàüî)B pr˜ °dONLNdVììü∞) ocedur…İdONLNd\ì∞ü˛)e. Do not mix the .°dONLNdnüä´“(®äopen and close rôİdONLNd~ü“´î)H.outines for the low-level interface with the rć°dONLNd¨üî´æ)¬
  4040. outines frô °dONLNd∂üæ´)*om the high-level °dONLNd»´ä∑µ(¥ä interface. 
  4041. °dONLNd‘—H⁄o(ÿHASSEMBLfl°dONLNd€—n⁄–)&Y LANGUAGE INFORMAðdONLNdÌ—–⁄Â)bTION
  4042. .°dONLNdÚ‡äÏ¢(ÈäThe rR`°dONLNd˜‡¢Ï)outine selector for the R`°dONLNd‡ÏB)d
  4043. PrDrvrOpenR`°dONLNd‡BÏN)< pr$¿°dONLNd‡NÏk) ocedur˜ °dONLNd"‡jÏÆ)e is $80000000. 
  4044.     .°dONLNd3ä˚è(¯äTÄ–°dONLNd4è˚∫)    rap macro°dONLNd?˚)ãTÄ–°dONLNd@˚-)rap
  4045. .°dONLNdD˛ä
  4046. ¥(ä_PrGlue.°dONLNdM˛
  4047. 9)ê$A8FD
  4048. :HB4;HB ;H;
  4049. ˇ·ˇ‚7^
  4050. °dONLNdT-H;í(7H
  4051. PrDrvrClose  &°dONLNda-ì;ñ)K ˇˇˇˇˇˇ(71
  4052. ˇˇ≈⁄.°dONLNdcLäXù(UäThe ˇˇQéE⁄°dONLNdgLûX‡) PrDrvrCloseˇˇ≈⁄E⁄°dONLNdrL‡XÎ)B prfi°dONLNduLÎX) ocedur∞t°dONLNd{LX{)e closes the printer driver
  4053. |°dONLNdñL{XÉ)s, r¢∂°dONLNdôLÉX)!eleasing the memory it occupies. °dONLNdªdäp(mäPROCEDURE PrDrvrClose;
  4054. .°dONLNd“åHïo(ìHASSEMBLfl°dONLNdŸånï–)&Y LANGUAGE INFORMAðdONLNdÎå–ïÂ)bTION
  4055. .°dONLNdõäߢ(§äThe rR`°dONLNdıõ¢ß)outine selector for the R`°dONLNd
  4056. õßH)d PrDrvrCloseR`°dONLNdõHßT)B pr$¿°dONLNdõTßq) ocedur˜ °dONLNd!õpߥ)e is $88000000. 
  4057.     .°dONLNd2´ä∂è(≥äTÄ–°dONLNd3´è∂∫)    rap macro°dONLNd>´∂)ãTÄ–°dONLNd?´∂-)rap
  4058. .°dONLNdCπä≈¥(¬ä_PrGlue.°dONLNdLπ≈9)ê$A8FD
  4059. ıH˝4ˆH˝ ˆHˆ
  4060. ˇ·ˇ‚7^
  4061. °dONLNdSËHˆç(ÚH PrDrvrDCE  {@°dONLNd^Ëéˆë)F ˇˇˇˇˇˇ(Ú1
  4062. .°dONLNd`ä¿(ä    PrDrvrDCE°dONLNdi¿Δ)6 rR`°dONLNdkΔj)%eturns a handle to the printer driver¿°dONLNdêk™)•’s device contr‚ °dONLNdü©)>ol entry (DCE). °dONLNd∞ä+,((äFUNCTION PrDrvrDCE: Handle;
  4063. .°dONLNdÃGHPÅ(NH DESCRIPTION
  4064. °dONLNdÿVäbŸ+BThe printer driverˇÄ°dONLNdÍV⁄b)P’s device contrp °dONLNd˘VbÇ)@ol entry contains specifi İdONLNdVÉb)i!c information about that printer °dONLNd3bän•(kädriver‡°dONLNd9b•n™). Ó@°dONLNd;b©nØ)YÆ¿°dONLNd<bØnR)&ou can also get a handle to the driverø`°dONLNdbbSn¸)§%’s DCE by calling the Device Manager .°dONLNdánäz∞(wä    function °dONLNdên∞z¯)& GetDCtlEntryd@°dONLNdún˜z)G    . For mor6†°dONLNd•nzÆ)' e information about device contr    °dONLNd≈nÆz)êol entries and how .°dONLNdÿzäÜÀ(ÉäFthe Device Manager uses them, see the chapter “Device Manager” in the #`°dONLNdzÃÜÊ(ÉÃInside °dONLNd%Üäí¥(èä    MacintoshpİdONLNd.ܵí∫)+: pİdONLNd:Ü∫íŸ)Devicesª¿°dONLNdAÜŸífi). ˇ@ˇ ˇˇˇˇ@
  4065. ˇ·ˇ‚7^
  4066. 4*\˜, Palatino
  4067. .+l"CHAPTER €`)\1,     Helvetica
  4068.     (@lThe Printing Manager4⁄*˙¯
  4069. (‡*1 )-c)58
  4070.     )9    Reference
  4071. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  4072. °dONLNd\*eQ(c*ASSEMBLfl°dONLNd\Pe≤)&Y LANGUAGE INFORMAðdONLNd\≤e«)bTION
  4073. .°dONLNdklwÑ(tlThe rR`°dONLNd#kÑwË)outine selector for the ,
  4074. CourierR`°dONLNd;kËw)d    PrDrvrDCER`°dONLNdDkwÉ)6 function is $94000000. 
  4075.     .°dONLNd]{lÜq(ÉlTÄ–°dONLNd^{qÜú)    rap macro°dONLNdi{¸Ü)ãTÄ–°dONLNdj{Ü)rap
  4076. .°dONLNdnâlïñ(íl_PrGlue.°dONLNdwâ¸ï)ê$A8FD
  4077. ≈*Õ¯4Δ*Õ¯ Δ*Δ˛
  4078. ˇ·ˇ‚7^
  4079. °dONLNd~∏*ΔY(¬*PrDrvrV¿°dONLNdÖ∏XΔm).ers  ~°dONLNdä∏nΔq) ˇˇˇˇˇˇ(¬Ú1
  4080. ˇˇí.°dONLNdå◊l„®(‡l
  4081. PrDrvrVersˇˇ´Ü°dONLNdñ◊®„≠)< r˝Ê°dONLNdò◊≠„Ω)?eturns the version number of the printer driver in the system r/°dONLNd◊◊æ„’(‡æesourh°dONLNd‹◊’„„)ce f}n°dONLNd‡◊„„¯)ile.   °dONLNdËÔl˚(¯lFUNCTION PrDrvrVers: Integer;
  4082. .°dONLNd* c(* DESCRIPTION
  4083. °dONLNd&l2|+B?The version number of the printer driver is available as the prflİdONLNdQ&|2ë(/|edefiõ@°dONLNdV&í2Õ)
  4084. ned constant .°dONLNdc2l>®(;l
  4085. iPrRelease°dONLNdm2®>≠)<. R`°dONLNdo2≠>¥)Yg`°dONLNdp2≥>)ou may want to compar9¿°dONLNdÖ2>7)ge the r  °dONLNdå27>Z)    esult of   °dONLNdï2Z>ñ)#
  4086. PrDrvrVers  °dONLNdü2ñ>±)< with   °dONLNd•2±>Ì)
  4087. iPrRelease  °dONLNdØ2Ì>Ô)< .°dONLNd∞>lJˇ(Gl%to see if the printer driver in the rÑ@°dONLNd’>ˇJ)ìesourÃİdONLNd⁄>J()ce fiì °dONLNdfl>)Ji)le is the most r’¿°dONLNdÔ>iJ)@!ecent version.  This is the only °dONLNdJlV((Sl+low-level printing function you may call fr£¿°dONLNd;J(V£)ºom the high-level interface. 
  4088. °dONLNdYp*yQ(w*ASSEMBLfl°dONLNd`pPy≤)&Y LANGUAGE INFORMAðdONLNdrp≤y«)bTION
  4089. .°dONLNdwlãÑ(àlThe rR`°dONLNd|ÑãË)outine selector for the R`°dONLNdîËã$)d
  4090. PrDrvrVersR`°dONLNdû$ãå)< function is $9A000000. 
  4091.     .°dONLNd∑èlöq(ólTÄ–°dONLNd∏èqöú)    rap macro°dONLNd√è¸ö)ãTÄ–°dONLNdƒèö)rap
  4092. .°dONLNd»ùl©ñ(¶l_PrGlue.°dONLNd—ù¸©)ê$A8FD
  4093. Õ*’¯4Œ*’¯ Œ*Œ˛
  4094. ˇ·ˇ‚7^
  4095. °dONLNd◊¿*ŒÑ( *Low-Level ContrÚ°dONLNdʿь´)Zol Callsˇˇˇˇˇˇ( Ú1
  4096. .°dONLNdÔ’l·Ä(filThe °dONLNdÛ’Ä·∂)    PrCtlCall°dONLNd¸’∂·¬)6 prR`°dONLNdˇ’¬·fl) ocedur$¿°dONLNd’fl·O)e calls the printer driver‚ °dONLNd’O·n)p’s contr¥Ä°dONLNd'’n·})ol r܇°dONLNd+’}·Ò)outine. Instead of sending ˇˇ∏ú°dONLNdF·lÌ(Íl(the low-level calls to the device driverH°dONLNdn·Ì3)±, the ˇˇ)‘áİdONLNdt·3Ìi)    PrCtlCallˇˇ∏úáİdONLNd}·iÌt)6 pr|°dONLNdÄ·uÌí) ocedur‰‹°dONLNdÜ·ë̘)e converts the call into .°dONLNdüÌl˘(ˆlits high-level equivalent befor~°dONLNdæÌ˘&)Ñ
  4097. e execution. 
  4098. °dONLNdÃ*Q(*ASSEMBLfl°dONLNd”P≤)&Y LANGUAGE INFORMAðdONLNdÂ≤«)bTION
  4099. .°dONLNdÍ"l.Ñ(+lThe rR`°dONLNdÔ"Ñ.Ë)outine selector for the R`°dONLNd"Ë.)d    PrCtlCallR`°dONLNd".*)6 pr$¿°dONLNd"*.G) ocedur˜ °dONLNd"F.é)e is $A0000E00. 
  4100.     .°dONLNd*2l=q(:lTÄ–°dONLNd+2q=ú)    rap macro°dONLNd62¸=)ãTÄ–°dONLNd72=)rap
  4101. .°dONLNd;@lLñ(Il_PrGlue.°dONLNdD@¸L)ê$A8FD
  4102. |*ѯ4}*ѯ }*}˛
  4103. ˇ·ˇ‚7^
  4104. °dONLNdKo*}l(y* PrCtlCall WZİdONLNdVol}/)B%ith the iPrBitsCtl Control Constant  >İdONLNd{o0}3)ƒ ˇˇˇˇˇˇ)¬1
  4105. .°dONLNd}élös(ólYï°dONLNd~érö±)ou can use the ï°dONLNdçé±öÁ)?    PrCtlCallï°dONLNdñéÁöÛ)6 prg`°dONLNdôéÛö) ocedur9¿°dONLNdüéöB) e with the 9¿°dONLNd™éBö~)2
  4106. iPrBitsCtl9¿°dONLNd¥é~öñ)< contr  °dONLNd∫éñö„)ol constant when .°dONLNdÀöl¶‰(£lyou want to print bitmaps. ˇ@@ˇ ˇˇˇˇ@
  4107. ˇ·ˇ‚7^
  4108. 4H\, Palatino
  4109. .+ä"CHAPTER €`)\1,     Helvetica
  4110.     (@äThe Printing Manager4⁄ä˙(‡ä    Reference
  4111. ~¿(‡1
  4112. ‡)-a¿)59
  4113. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  4114. Courier
  4115. .°dONLNd\ähÏ(eä;PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; °dONLNdFjv‡+~$lParam2: LongInt; lParam3: LongInt);.°dONLNdkÇäé∑(ãä    iWhichCtl°dONLNduÇÃé)B
  4116. The constant ܰdONLNdÇÇé1);
  4117. iPrBitsCtl/‡°dONLNdåÇ2é
  4118. )+4. This constant allows you to send all or part of a °dONLNd¿éÃö1(óÃQuickDraw bitmap dir£@°dONLNd‘é1öÇ)eectly to the printerú°dONLNdËéÇöÑ)Q.°dONLNdÍû䙯(ßälParam1°dONLNdÚûÙ”)BA∫†°dONLNdÛû”™l)! pointer to the QuickDraw bitmap.°dONLNdÆä∫Æ(∑älParam2°dONLNdÆÃ∫”)BA∫†°dONLNdÆ”∫) pointer to the rD‡°dONLNd/Æ∫è)Eectangle you want to print.°dONLNdKæä Æ(«älParam3°dONLNdSæÃ )B
  4119. The type of rÁ`°dONLNd`æ ‘)8.esolution used to print the bitmap. The LaserW °dONLNdéæ’  )—riter printer °dONLNdú Ã÷(”à driver ignor‹†°dONLNd® ÷%)5    es this fl) °dONLNd≤ &÷)%1ag. This parameter can have one of the following °dONLNd„÷ÂÎ(flÃvalues:
  4120.     °dONLNdÎÔä˙∞(˜äConstant°dONLNdıÔ˙ )êV0°dONLNdˆÔ ˙2)alue°dONLNd˚Ôå˙Ω)l Description
  4121. .°dONLNd˝ä    Ã(ä lScreenBits.°dONLNd˝    G)ê    $00000000°dONLNd˝å    £)rThe rÄ¿°dONLNd#˝£    ‚)esolution is 80,    SymbolÉ`°dONLNd2˝‚È)? ¥Ä`°dONLNd4˝Í    ˘) 72..°dONLNd9    äΔ(ä
  4122. lPaintBits.°dONLNdE    G)ê    $00000001°dONLNdO    å£)rThe rÄ¿°dONLNdT    £‚)esolution is 72É`°dONLNdc    ‚È)? ¥Ä`°dONLNde    Í˘) 72..°dONLNdjä!ÿ(ä
  4123. lHiScreenBits.°dONLNdy!G)ê    $00000002°dONLNdÉå!£)rThe rÄ¿°dONLNdà£!Á)esolution is 160É`°dONLNdòÁ Ó)D ¥Ä`°dONLNdöÔ!) 144..°dONLNd†!ä-“(*ä lHiPaintBits.°dONLNdÆ!-G)ê    $00000003°dONLNd∏!å-£)rThe rÄ¿°dONLNdΩ!£-Á)esolution is 144É`°dONLNdÕ!Á,Ó)D ¥Ä`°dONLNdœ!Ô-) 144.
  4124. ]He4^He ^H^
  4125. ˇ·ˇ‚7^
  4126. °dONLNd÷PH^ä(ZH PrCtlCall WZİdONLNd·Pä^G)B#ith the iPrIOCtl Control Constant  ñİdONLNdPG^J)Ω ˇˇˇˇˇˇ)…1
  4127. .°dONLNdoä{ë(xäYï°dONLNdoê{œ)ou can use the ï°dONLNdoœ{)?    PrCtlCallï°dONLNdo{)6 prg`°dONLNd"o{.) ocedur9¿°dONLNd(o.{`) e with the 9¿°dONLNd3o`{ê)2iPrIOCtl9¿°dONLNd;oê{®)0 contr  °dONLNdAo®{)ol constant when you .°dONLNdV{äá¡(Ñä
  4128. want text str¶ °dONLNdc{¡áC)7eaming in your application. T±`°dONLNdÄ{Cá^)Çext str™`°dONLNdá{^á)+eaming is useful for fast printing of text °dONLNd≤áäì›(êäwhen speed is morÂ`°dONLNd√á›ìL)Se important than visual fiÿ¿°dONLNd›áMì˚)p)delity or formatting. It makes no use of °dONLNdìäüΩ(úä    QuickDrawf†°dONLNdìΩü¬)3. .°dONLNd´ä∑Ï(¥ä;PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; °dONLNdXπ≈‡+~$lParam2: LongInt; lParam3: LongInt);.°dONLNd}—ä›∑(⁄ä    iWhichCtl°dONLNdá—Û)B
  4129. The constant ܰdONLNdî—›,);iPrIOCtlÊ¿°dONLNdú—,›¨)%. This constant causes text str懰dONLNdª—¨›Ú)Äeaming to occurÔ†°dONLNd —Ú›˘)F.  .°dONLNdŒ·äÌ¥(ÍälParam1.°dONLNd÷·ÃÌ”)BA∫†°dONLNd◊·”Ìt)' pointer to the beginning of the text. °dONLNdˇÒä˝Æ(˙älParam2°dONLNdÒÃ˝W)BThe number of bytes to transfer#@°dONLNd&ÒW˝ê)ã
  4130. . The high-or†°dONLNd3Òê˝≥)9der worÒ °dONLNd:Ò≤˝Í)"
  4131. d must be 0. °dONLNdHä
  4132. Æ(
  4133. älParam3°dONLNdPÃ
  4134. )BThis should be 0. 
  4135. =HE4>HE >H>
  4136. ˇ·ˇ‚7^
  4137. °dONLNdd0H>ä(:H PrCtlCall WZİdONLNdo0ä>G)B#ith the iPrEvtCtl Control Constant ϰdONLNdí0G>J)Ω ˇˇˇˇˇˇ)…1
  4138. .°dONLNdîOä[ë(XäYï°dONLNdïOê[œ)ou can use the ï°dONLNd§Oœ[)?    PrCtlCallï°dONLNd≠O[)6 prg`°dONLNd∞O[.) ocedur9¿°dONLNd∂O.[`) e with the 9¿°dONLNd¡O`[ñ)2    iPrEvtCtl9¿°dONLNd Oñ[Æ)6 contr  °dONLNd–OÆ[Ô)ol constant for .°dONLNd‡[ägÕ(däprinting the scr    `°dONLNd[Œgã)D&een or the topmost window on an ImageWïİdONLNd[ägæ)º
  4139. riter printerfi‡°dONLNd#[Ωg˜)3 . The LaserWr@°dONLNd/[˜g ):riter °dONLNd5gäs=(pä+printer driver does not support this call. .°dONLNdaäãÏ*;PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1: LongInt; °dONLNdßçô‡+~$lParam2: LongInt; lParam3: LongInt);.°dONLNdÕä±∑(Æä    iWhichCtl°dONLNd÷•ñ)B
  4140. The constant ܰdONLNd„•±0);    iPrEvtCtl∞¿°dONLNdÏ•0± ))4. This constant prints the object you have selected °dONLNd ±ÃΩ˜(∫Ã
  4141. using the Í`°dONLNd*±˜Ω)+lParam1£°dONLNd1±ΩL)%
  4142.  parameterˆ†°dONLNd;±KΩR)/.  ˇä@ˇ ˇˇˇˇ@
  4143. ˇ·ˇ‚7^
  4144. 4*\˜, Palatino
  4145. .+l"CHAPTER €`)\1,     Helvetica
  4146.     (@lThe Printing Manager4⁄*˙¯
  4147. (‡*1 )-c)60
  4148.     )9    Reference
  4149. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  4150. Courier
  4151. .°dONLNd\lhñ(ellParam1.°dONLNd\ÆhÔ)BMThis parameter selects the object to be printed. If this value is $00000000, °dONLNdUhÆt* you want to print the scrn‡°dONLNdnhtÒ)m3een. If this value is $00010000, you want to print °dONLNd°tÆÄ
  4152. (}Æthe topmost windowÓ@°dONLNd≥t    Ä)[. °dONLNd∂Ñlêê(çllParam2°dONLNdæÑÆêÒ)BThis should be ˜‡°dONLNdÕÑÒê)CNIL¡°dONLNd–Ñê). °dONLNd”îl†ê(ùllParam3°dONLNd€îƆÒ)BThis should be ˜‡°dONLNdÍîÒ†)CNIL¡°dONLNdÌî†). 
  4153. –*ÿ¯4—*ÿ¯ —*—˛
  4154. ˇ·ˇ‚7^
  4155. °dONLNdÒ√*—,(Õ*.PrCtlCall with the iPrDevCtl Control Constant °dONLNd√-—0(Õ- ˇˇˇˇˇˇ)≈1
  4156. .°dONLNd!‚lÓs(ÎlYï°dONLNd"‚rÓ±)ou can use the ï°dONLNd1‚±ÓÁ)?    PrCtlCallï°dONLNd:‚ÁÓÛ)6 prg`°dONLNd=‚ÛÓ) ocedur9¿°dONLNdC‚ÓB) e with the 9¿°dONLNdN‚BÓx)2    iPrDevCtl9¿°dONLNdW‚xÓê)6 contr  °dONLNd]‚êÓ—)ol constant for .°dONLNdmÓl˙Ç(˜lcontr>İdONLNdrÓÉ˙Ô)olling the printer device..°dONLNdçlÚ(lAPROCEDURE PrCtlCall(iWhichCtl: Integer;lParam1: LongInt;lParam2: °dONLNdŒl *LongInt; lParam3: LongInt);.°dONLNdÍ,l8ô*    iWhichCtl°dONLNdÙ,Æ8È)B
  4157. The constant ܰdONLNd,È8);    iPrDevCtlŸÄ°dONLNd
  4158. ,8),. .°dONLNd
  4159. <lHñ(EllParam1.°dONLNd<ÆH‰)BGThe action you want to take.  The values possible for this parameter arû°dONLNd\<‰HÎ(E‰e °dONLNd^HÆT„(QÆ listed belowP†°dONLNdjH„TË)5. °dONLNdmXldê(allParam2°dONLNduXÆdÒ)BThis should be ˜‡°dONLNdÑXÒd)CNIL¡°dONLNdáXd). °dONLNdähltê(qllParam3°dONLNdíhÆtÒ)BThis should be ˜‡°dONLNd°hÒt)CNIL¡°dONLNd§ht). 
  4160. °dONLNdßé*óc(ï* DESCRIPTION
  4161. .°dONLNd≥ùl©s+BYï°dONLNd¥ùr©3),ou can specify the following values for the ï°dONLNd‡ù3©])¡lParam1ï°dONLNdÁù]©í)*  parameter:
  4162.     .°dONLNdÛ∞*ªP(∏*Constant°dONLNd¸∞éªî)dV0°dONLNd˝∞)alue°dONLNd∞–ª)< Description
  4163. .°dONLNdæ* f(«*
  4164. lPrDocOpen.°dONLNdæl ô)B    $00010000°dONLNd#æ– À)d:Opens the document.This is similar to the high-level call .°dONLNd`…–’*     PrOpenDoc°dONLNdi…’≥)6' and should be followed with a call to °dONLNdê…≥’È)≠    PrCtlCall°dONLNdô…È’Î)6 °dONLNdù‘–‡˚(›–    with the °dONLNd¶‘˚‡1)+    iPrDevCtl°dONLNdØ‘1‡I)6 contrR`°dONLNdµ‘I‡É)ol call and a R`°dONLNd√‘ɇß):param1R`°dONLNd…‘߇–)$
  4165.  value of °dONLNd÷fl–Î(Ë– lPrDocClose°dONLNd·flÎ)B. °dONLNd‰Í*ˆZ(Û*lPrReset.°dONLNdÌÍlˆô)B    $00010000°dONLNd˜Í–ˆ    )d Reserved by 4‡°dONLNdÍ    ˆ&)9Apple..°dONLNd
  4166. ı*r(˛* lPrPageClose.°dONLNdırü)H    $00020000°dONLNd!ı–∂)^8Closes the page. This is similar to the high-level call .°dONLNd\– * PrClosePage°dONLNdg è)B and should follow a call to °dONLNdÑè ≈)}    PrCtlCall°dONLNdç≈ «)6 °dONLNdë –˚(–    with the °dONLNdö ˚1)+    iPrDevCtl°dONLNd£ 1I)6 contrR`°dONLNd© IÉ)ol call and a R`°dONLNd∑ Éß):param1R`°dONLNdΩ ß–)$
  4167.  value of °dONLNd –"(– lPrPageOpen°dONLNd’")B. °dONLNdÿ!*-f(**
  4168. lPrPageEnd.°dONLNd„!l-ô)B    $00020000°dONLNdÌ!–-    )d Reserved by 4‡°dONLNd˘!    -))9Apple. .°dONLNd,*8l(5* lPrLineFeed.°dONLNd
  4169. ,l8ô)B    $00030000°dONLNd,–8)dPaper advance.  .°dONLNd(7*CZ(@*lPrLFStd.°dONLNd17lCõ)B    $0003FFFF°dONLNd;7–C¸)d
  4170. Carriage r`°dONLNdE7˝Cë)- eturn with line feed. The ImageW$‡°dONLNde7ëCÂ)îriter printer driver °dONLNd}B–N (K–causes a carriage r†°dONLNdêB!N·)Q-eturn plus a paper feed of 1/6th of an inch. °dONLNd¿M–Y(V–
  4171. The LaserW`°dONLNd MYfi)51riter printer driver moves the pen location down °dONLNd˛X–d˙(a–
  4172. the page. .°dONLNd    c*ol(l* lPrPageOpen.°dONLNdcloô)B    $00040000°dONLNdc–oÏ)dDOpens the page for printing. This is similar to the high-level call .°dONLNdfn–z *
  4173. PrOpenPage°dONLNdpn zπ)<' and should be followed with a call to °dONLNdónπzÔ)≠    PrCtlCall°dONLNd†nÔzÒ)6 °dONLNd§y–Ö˚(Ç–    with the °dONLNd≠y˚Ö1)+    iPrDevCtl°dONLNd∂y1ÖI)6 contrR`°dONLNdºyIÖÉ)ol call and a R`°dONLNd yÉÖß):param1R`°dONLNd–yßÖ–)$
  4174.  value of °dONLNd›Ñ–ê(ç– lPrPageClose°dONLNdÈÑê)H. °dONLNdÏè*õl(ò* lPrDocClose.°dONLNd¯èlõô)B    $00050000°dONLNdè–õŒ)d<Closes the document. This is similar to the high-level call .°dONLNdAö–¶ *
  4175. PrCloseDoc°dONLNdKö ¶â)< and should follow a call to °dONLNdhöâ¶ø)}    PrCtlCall°dONLNdqöø¶Ï)6
  4176.  with the °dONLNd~•–±(Æ–    iPrDevCtl°dONLNdᕱ)6 contrR`°dONLNd畱X)ol call and a R`°dONLNdõ•X±|):param1R`°dONLNd°•|±•)$
  4177.  value of R`°dONLNd´••±·))
  4178. lPrDocOpenR`°dONLNdµ•·±Ê)<. ˇ h@ˇ ˇˇˇˇ@
  4179. ˇ·ˇ‚7^
  4180. 4H\, Palatino
  4181. .+ä"CHAPTER €`)\1,     Helvetica
  4182.     (@äThe Printing Manager4⁄ä˙(‡äSummary
  4183. ~¿(‡1
  4184. ‡)-a¿)61
  4185. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  4186. ^Hx4^Hx
  4187. äHë4äHë äHä
  4188. ˇ·ˇ‚7^
  4189. ˇˇ£‰ˇÆ°dONLNdvHàí(ÑHSummaryˇˇˇˇˇˇ⁄|(Ñ 1
  4190. ¡HΔ4¡HΔ ¬H¬
  4191. ˇ·ˇ‚7^
  4192. °dONLNd≥H¡}(ΩH    Constants,
  4193. Courier
  4194. .°dONLNdÃHÿf*CONST°dONLNd⁄TÊ¥+ iPFMaxPgs = 128;°dONLNd+ËTÙ∫*iPrPgFract = 120;°dONLNd>Ë∫Ù¿)f °dONLNdBˆfÏ(ˇfA{Page scale factor. ptPgSize (below) is in units of 1/iPrPgFract}°dONLNdÖT¢(
  4195. T
  4196. iPrPgFst = 1;°dONLNd)N °dONLNdõ‰h)B{Page range constants}°dONLNd≥T¥(TiPrPgMax = 9999;°dONLNd≈ T,Æ*iPrRelease = 3;°dONLNd◊ Æ,¥)Z °dONLNd› ‰,¬)6%{Current version number of the code.}°dONLNd.T:¥(7TiPrSavPFil = -1;°dONLNd<TH∫*iPrAbort = $0080;°dONLNd)JTV®*iPrDevCtl = 7;°dONLNd:J®VÆ)T °dONLNd@J‰V§)< {The PrDevCtl proc's ctl number}°dONLNdbXTd“(aTlPrReset = $00010000;°dONLNdX‰d»)ê&{The PrDevCtl proc's CParam for reset}°dONLNdßfTr‰(oTlPrLineFeed = $00030000;°dONLNd¡tTÄ“*lPrLFStd = $0003FFFF;°dONLNdfit‰Ä)ê2{The PrDevCtl proc's CParam for std paper advance}°dONLNdÇTéfi(ãTlPrLFSixth = $0003FFFF;°dONLNd+êTúfi*lPrPageEnd = $00020000;°dONLNdJê‰ú⁄)ê){The PrDevCtl proc's CParam for end page}°dONLNduûT™fi(ßTlPrDocOpen = $00010000;°dONLNdé¨T∏‰*lPrPageOpen = $00040000;°dONLNd®∫TΔÍ*lPrPageClose = $00020000;°dONLNd√»T‘‰*lPrDocClose = $00050000;°dONLNd›÷T‚¢*
  4197. iFMgrCtl = 8;°dONLNdÌ÷¢‚®)N °dONLNdÛ÷‰‚Ï)B,{The File Mgr's tail-hook Proc's ctl number}°dONLNd!‰TΔ(ÌTiMemFullErr = -108;°dONLNd6ÚT˛Æ*iIOAbort = -27;°dONLNdGT fi*pPrGlobals = $00000944;°dONLNdf‰ å)ê{The PrVars low memory area}°dONLNdÑTÆ(TbDraftLoop = 0;°dONLNdïT(Æ*bSpoolLoop = 1;°dONLNd¶*T6Æ*bUser1Loop = 2;°dONLNd∑8TDÆ*bUser2Loop = 3;°dONLNd»FTRÆ*iPrBitsCtl = 4;°dONLNdŸTT`¥*lScreenBits = 0;°dONLNdÎbTnÆ*lPaintBits = 1;°dONLNd¸pT|*lHiScreenBits = $00000002;°dONLNdpˆ|)¢-{The Bitmap Print proc's Screen Bitmap param}°dONLNdN~Tä(áTlHiPaintBits = $00000003; °dONLNdq~ˆä
  4198. )¢.{The Bitmap Print proc's Paint [sq pix] param}°dONLNd°åTò¢(ïT
  4199. iPrIOCtl = 5;°dONLNd∞öT¶®*iPrEvtCtl = 6;°dONLNd«öˆ¶∞)¢{The PrEvent proc's ctl number}°dONLNdË®T¥fi(±TlPrEvtAll = $0002FFFD; ˇ    ‡@ˇ ˇˇˇˇ@
  4200. ˇ·ˇ‚7^
  4201. 4*\˜, Palatino
  4202. .+l"CHAPTER €`)\1,     Helvetica
  4203.     (@lThe Printing Manager4⁄*˙¯
  4204. (‡*1 )-c)62
  4205.     )9Summary
  4206. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  4207. Courier
  4208. .°dONLNd\Hhn(eH1{The PrEvent Proc's CParam for the entire screen}°dONLNd3j6v¿(s6lPrEvtTop = $0001FFFD; °dONLNdMxHÑ\+.{The PrEvent Proc's CParam for the top folder}°dONLNd}Ü6íñ(è6iPrDrvrRef = -3;°dONLNdèî6†ú*getRslDataOp = 4;°dONLNd¢¢6ÆÑ*
  4209. setRslOp = 5;°dONLNd±∞6ºñ*draftBitsOp = 6;°dONLNd√æ6 ¢*noDraftBitsOp = 7;°dONLNd◊Ã6ÿä*getRotnOp = 8;°dONLNdÁ⁄6Êä*NoSuchRsl = 1;°dONLNd˜Ë6Ù~* RgType1 = 1;
  4210. %*+¯4&*+¯ '*'˛
  4211. ˇ·ˇ‚7^
  4212. .°dONLNd*&M("*Data T˘@°dONLNd
  4213. L&d)"ypes
  4214. .°dONLNd1*=Ä(:*9TYPE TFeed = (feedCut,feedFanfold,feedMechCut,feedOther);°dONLNdJI6U+ &TScan = (scanTB,scanBT,scanLR,scanRL);°dONLNdra6mê*TPRect = ^Rect;°dONLNdÑaêmÍ)Z { A Rect Ptr }°dONLNdïy6ÖΔ(Ç6PrIdleProcPtr = ProcPtr;°dONLNdØë6ù¿*PItemProcPtr = ProcPtr;°dONLNd»©6µÆ*TPPrPort = ^TPrPort;°dONLNdfi∑6√ñ*TPrPort = RECORD°dONLNdÒ≈H—r+gPort: °dONLNd¸≈ê—Δ)H    GrafPort;°dONLNd    ≈ÿ—t)H{The Printer's graf port.}°dONLNd&”Hflx(‹HgProcs: °dONLNd2”êfl¿)HQDProcs;°dONLNd>”ÿfl>)H{..and its procs}°dONLNdR·HÌ~(ÍH    lGParam1:°dONLNd_·êÌ¿)HLongInt;°dONLNdkÔZ˚P(¯Z){16 bytes for private parameter storage.}°dONLNdó˝H    ~(H    lGParam2:°dONLNd§˝ê    ¿)HLongInt;°dONLNdØ H~(H    lGParam3:°dONLNdº ê¿)HLongInt;°dONLNd«H%~("H    lGParam4:°dONLNd‘ê%¿)HLongInt;°dONLNdfl'H3x(0HfOurPtr:°dONLNdÎ'ê3¿)HBoolean;°dONLNd˜5ZAt(>Z/{Whether the PrPort allocation was done by us.}°dONLNd)CHO~(LH    fOurBits:°dONLNd6CêO¿)HBoolean;°dONLNdBQZ]t(ZZ/{Whether the BitMap allocation was done by us.}°dONLNdt_Hk`(hHEND;°dONLNdzw6ÉÆ(Ä6TPPrInfo = ^TPrInfo;ˇ ¯@ˇ ˇˇˇˇ@
  4215. ˇ·ˇ‚7^
  4216. 4H\, Palatino
  4217. .+ä"CHAPTER €`)\1,     Helvetica
  4218.     (@äThe Printing Manager4⁄ä˙(‡äSummary
  4219. ~¿(‡1
  4220. ‡)-a¿)63
  4221. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  4222. Courier
  4223. .°dONLNd\Th¥(eTTPrInfo = RECORD°dONLNdjfvÑ+iDev:°dONLNdjúvÃ)6Integer;°dONLNd&xfÑ&(Åf {Font Mgr/QuickDraw device code}°dONLNdIÜfíä*iVRes:°dONLNdRÜúíÃ)6Integer;°dONLNd^îx†Ü(ùx-{Resolution of device, in device coordinates}°dONLNdé¢fÆä(´fiHRes:°dONLNdó¢úÆÃ)6Integer;°dONLNd£∞xºå(πx.{..note: V before H => compatable with Point.}°dONLNd‘æf ä(«frPage:°dONLNd›æú ∫)6Rect;°dONLNdÊÃxÿ¬(’x7{The page (printable) rectangle in device coordinates.}°dONLNd⁄TÊl(„TEND;°dONLNd%ÚT˛¿*TPPrStl = ^TPrStl;°dONLNd9
  4224. TÆ*TPrStl = RECORD°dONLNdKf$Ñ+wDev:°dONLNdSú$Ã)6Integer;°dONLNd^&f2ê(/fiPageV:°dONLNdh&ú2Ã)6Integer;°dONLNds4f@ê(=fiPageH:°dONLNd}4ú@Ã)6Integer;°dONLNdàBfNä(KfbPort:°dONLNdëBúNfi)6 SignedByte;°dONLNdüPf\Ñ(Yffeed:°dONLNdßPú\¿)6TFeed;°dONLNdØ^Tjl(gTEND;°dONLNd¥vHÇ¥(HTPPrJob = ^TPrJob;°dONLNd«éHö¢*TPrJob = RECORD°dONLNdÿúT®ä+     iFstPage:°dONLNdÂúú®Ã)HInteger;°dONLNdÓúî )0  {Page range}°dONLNd˛™T∂ä(≥T    iLstPage:°dONLNd ™ú∂Ã)HInteger;°dONLNd∏TƒÑ(¡TiCopies:°dONLNd!∏úƒÃ)HInteger;°dONLNd*∏ÃP)0   {Number of copies.}°dONLNdBΔT“ê(œT
  4225. bJDocLoop:°dONLNdPΔú“fi)H SignedByte;°dONLNd]‘T‡V(›T+{The printing method: immediate or spooled}°dONLNdä‚TÓä*    fFromUsr:°dONLNdó‚úÓÃ)HBoolean;°dONLNd°T¸h(˘T.{Printing from an user's app (not PrApp) flag}°dONLNd—˛T
  4226. ê*
  4227. pIdleProc:°dONLNdfl˛ú
  4228. )HPrIdleProcPtr;°dONLNdÔ T¬(T={The proc called while application sends document to printer}°dONLNd.T&ê*
  4229. pFileName:°dONLNd<ú&ÿ)H
  4230. StringPtr;°dONLNdIÿ&™)<# {Spool filename: NIL for default.}°dONLNdn(T4ä(1T    iFileVol:°dONLNd{(ú4Ã)HInteger;°dONLNdÑ(Ã4∞)0&  {Spool file vol, set to 0 initially}°dONLNd¨6TBê(?T
  4231. bFileVers:°dONLNd∫6úBfi)H SignedByte;°dONLNd«DTPD(MT({Spool file version, set to 0 initially}°dONLNdÒRT^x*bJobX:°dONLNd˚Rú^fi)H SignedByte;°dONLNdRfi^J)B  {An extra byte.}°dONLNd`Tll(iTEND;°dONLNd xHÑ¥(ÅHTPPrint = ^TPrint;°dONLNd3êHú∫*THPrint = ^TPPrint;ˇx@ˇ ˇˇˇˇ@
  4232. ˇ·ˇ‚7^
  4233. 4*\˜, Palatino
  4234. .+l"CHAPTER €`)\1,     Helvetica
  4235.     (@lThe Printing Manager4⁄*˙¯
  4236. (‡*1 )-c)64
  4237.     )9Summary
  4238. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  4239. Courier
  4240. .°dONLNd\*hÑ(e*TPrint = RECORD°dONLNdj6vx+  iPrVersion:°dONLNd j~vÆ)HInteger;°dONLNd+j¥vn)6{(2) Printing software version}°dONLNdLx6Ñ`(Å6prInfo:°dONLNdWx~ÑÆ)HTPrInfo;°dONLNdbx¥ÑÜ)6#{the printer information subrecord}°dONLNdáÜ6í`(è6rPaper:°dONLNdíÜ~íú)HRect;°dONLNdöÜ¥í™)6){the paper rectangle [offset from rPage]}°dONLNd≈î6†Z(ù6prStl:°dONLNdœî~†®)HTPrStl;°dONLNdŸî¥†û)6'{information from the style dialog box}°dONLNd¢6Æl(´6    prInfoPT:°dONLNd¢~ÆÆ)HTPrInfo;°dONLNd¢ÆÆÜ)0$  {(14)  Print Time Imaging metrics}°dONLNd>∞6ºf(π6prXInfo:°dONLNdJ∞~º)HTPrXInfo;{Reserved}°dONLNd_æ6 Z(«6prJob:°dONLNdiæ~ ®)HTPrJob;°dONLNds楠í)6%{information from the job dialog box}°dONLNdöÃ6ÿ`(’6printX:°dONLNd•Ã~ÿV)H$ARRAY [1..19] OF Integer; {Reserved}°dONLNdÀ⁄6ÊN(„6END;°dONLNd–Ú*˛&(˚**{ The universal 120 byte printing record }°dONLNd˚* ∫*TPPrStatus = ^TPrStatus;°dONLNd*$ñ*TPrStatus = RECORD°dONLNd(&62r+ 
  4241. iTotPages:°dONLNd6&~2Æ)HInteger;°dONLNd?&Æ2V)0{Total pages in Print File.}°dONLNd]46@l(=6    iCurPage:°dONLNdj4~@Æ)HInteger;°dONLNds4Æ@¥)0 °dONLNdu4¥@2){Current page number}°dONLNdåB6Nx(K6 iTotCopies:°dONLNdõB~NÆ)HInteger;°dONLNd§BÆN>)0{Total copies requested}°dONLNdæP6\l(Y6    iCurCopy:°dONLNdÀP~\Æ)HInteger;°dONLNd‘PÆ\,)0{Current copy number}°dONLNdÎ^6jr(g6
  4242. iTotBands:°dONLNd˘^~jÆ)HInteger;°dONLNd^Æj8)0{Total bands per page.}°dONLNdl6xl(u6    iCurBand:°dONLNd(l~xÆ)HInteger;°dONLNd1lÆx,)0{Current band number}°dONLNdHz6Ül(É6    fPgDirty:°dONLNdUz~ÜÆ)HBoolean;°dONLNd^zÆÜ∞)0+{True if current page has been written to.}°dONLNdãà6îl(ë6    fImaging:°dONLNdòà~îÆ)HBoolean;°dONLNd°àÆîÄ)0#{Set while in band's DrawPic call.}°dONLNdΔñ6¢`(ü6hPrint:°dONLNd—ñ~¢Æ)HTHPrint;°dONLNd⁄ñÆ¢å)0%{Handle to the active Printer record}°dONLNd§6∞f(≠6pPrPort:°dONLNd
  4243. §~∞¥)H    TPPrPort;°dONLNd§¥∞P)6{Ptr to the active PrPort}°dONLNd3≤6æT(ª6hPic:°dONLNd<≤~æ∫)H
  4244. PicHandle;°dONLNdG≤∫æn)<{Handle to the active Picture}°dONLNdg¿6ÃN(…6END;°dONLNdlÿ*‰‘(·*G{ PicFile = a TPfHeader followed by n QuickDraw Pics (whose PicSize is °dONLNd≥Ê*Úl* invalid!) }°dONLNdøÙ*ñ*TPPrDlg = ^TPrDlg;°dONLNd“*Ñ*TPrDlg = RECORD°dONLNd„6N+ Dlg:°dONLNdÎ~Ã)H
  4245. DialogRecord;°dONLNd˘Ã“)N °dONLNd¸Ü)0{Ptr to the dialog box}°dONLNd6*r('6
  4246. pFltrProc:°dONLNd'~*)HModalFilterProcPtr;°dONLNdA¸*í)~{The dialog event filter}°dONLNd\,68r(56
  4247. pItemProc:°dONLNdj,~8Ã)H
  4248. PItemProcPtr;°dONLNd~,¸8û)~{The Item evaluating proc.}°dONLNdõ:6Fr(C6
  4249. hPrintUsr:°dONLNd©:~FÆ)HTHPrint;°dONLNd∏:¸Fh)~{The print record}°dONLNdÃH6TZ(Q6fDoIt:°dONLNd÷H~TÆ)HBoolean;°dONLNdÂH¸TÄ)~{Dialog box confirmed}°dONLNd˝V6bZ(_6fDone:°dONLNdV~bÆ)HBoolean;°dONLNdV¸b∞)~{User’s interaction completed}°dONLNd6d6p`(m6lUser1:°dONLNdAd~pÆ)HLongInt;°dONLNdPd¸p∞)~{Storage for your application}°dONLNdpr6~`({6lUser2:°dONLNd{r~~Æ)HLongInt;°dONLNdär¸~∞)~{Storage for your application}°dONLNd™Ä6å`(â6lUser3:°dONLNdµÄ~åÆ)HLongInt;°dONLNdƒĸå∞)~{Storage for your application}°dONLNd‰é6ö`(ó6lUser4:°dONLNdÔé~öÆ)HLongInt;°dONLNd˛é¸ö∞)~{Storage for your application}°dONLNdú6®N(•6END;°dONLNd#¥*¿Δ(Ω*PDlgInitProcPtr = ProcPtr;ˇ
  4250. ‘@ˇ ˇˇˇˇ@
  4251. ˇ·ˇ‚7^
  4252. 4H\, Palatino
  4253. .+ä"CHAPTER €`)\1,     Helvetica
  4254.     (@äThe Printing Manager4⁄ä˙(‡äSummary
  4255. ~¿(‡1
  4256. ‡)-a¿)65
  4257. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿,
  4258. Courier
  4259. .°dONLNd\HhÆ(eHTGnlData = RECORD°dONLNdjTvÑ+ iOpCode:°dONLNdjúvÃ)HInteger;°dONLNd)xTÑ~(ÅTiError:°dONLNd4xúÑÃ)HInteger;°dONLNd>ÜTíê(èT
  4260. lReserved:°dONLNdLÜúíÃ)HLongInt;°dONLNdUÜÃí™)0% {more fields here depending on call}°dONLNd|îT†l(ùTEND;°dONLNdŨH∏∫(µHTGetRslBlk = RECORD°dONLNdñ∫TΔÑ+ iOpCode:°dONLNd¢∫úΔÃ)HInteger;°dONLNd¨»T‘~(—TiError:°dONLNd∑»ú‘Ã)HInteger;°dONLNd¡÷T‚ê(flT
  4261. lReserved:°dONLNdœ÷ú‚Ã)HLongInt;°dONLNdŸ‰TÑ(ÌTiRgType:°dONLNd‰úÃ)HInteger;°dONLNdÔÚT˛~(˚TxRslRg:°dONLNd˙Úú˛Δ)HTRslRg;°dONLNdT ~(    TyRslRg:°dONLNdú Δ)HTRslRg;°dONLNdTñ(T iRslRecCnt:°dONLNd&úÃ)HInteger;°dONLNd0T(ä(%T    rgRslRec:°dONLNd=ú(2)HARRAY [1..27] OF TRslRec;°dONLNdX*T6l(3TEND;°dONLNd]BHN¢(KHTRslRg = RECORD°dONLNdnPT\r+ iMin:°dONLNdtPr\¢)Integer;°dONLNd~^Tjr(gTiMax:°dONLNdÑ^rj¢)Integer;°dONLNdélTxl(uTEND;°dONLNdìÑHê®(çHTRslRec = RECORD°dONLNd•íTûx+ iXRsl:°dONLNd¨íxû®)$Integer;°dONLNd∂†T¨x(©TiYRsl:°dONLNdΩ†x¨®)$Integer;°dONLNd«ÆT∫l(∑TEND;°dONLNdÃΔH“∫(œHTSetRslBlk = RECORD°dONLNd·‘T‡Ñ+ iOpCode:°dONLNdÌ‘ú‡Ã)HInteger;°dONLNd˜‚TÓ~(ÎTiError:°dONLNd‚úÓÃ)HInteger;°dONLNd T¸ê(˘T
  4262. lReserved:°dONLNdú¸Ã)HLongInt;°dONLNd$˛T
  4263. ~(ThPrint:°dONLNd/˛ú
  4264. Ã)HTHPrint;°dONLNd9 Tx(TiXRsl:°dONLNdC úÃ)HInteger;°dONLNdMT&x(#TiYRsl:°dONLNdWú&Ã)HInteger;°dONLNda(T4l(1TEND;°dONLNdf@HL¿(IHTDftBitsBlk = RECORD°dONLNd|NTZÑ+ iOpCode:°dONLNdàNúZÃ)HInteger;°dONLNdí\Th~(eTiError:°dONLNdù\úhÃ)HInteger;°dONLNdßjTvê(sT
  4265. lReserved:°dONLNdµjúvÃ)HLongInt;°dONLNdøxTÑ~(ÅThPrint:°dONLNd xúÑÃ)HTHPrint;°dONLNd‘ÜTíl(èTEND;ˇ –@ˇ ˇˇˇˇ@
  4266. ˇ·ˇ‚7^
  4267. 4*\˜, Palatino
  4268. .+l"CHAPTER €`)\1,     Helvetica
  4269.     (@lThe Printing Manager4⁄*˙¯
  4270. (‡*1 )-c)66
  4271.     )9Summary
  4272. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯,
  4273. Courier
  4274. .°dONLNd\*h¢(e*TGetRotnBlk = RECORD°dONLNdj6vf+ iOpCode:°dONLNd"j~vÆ)HInteger;°dONLNd,x6Ñ`(Å6iError:°dONLNd7x~ÑÆ)HInteger;°dONLNdAÜ6ír(è6
  4275. lReserved:°dONLNdOÜ~íÆ)HLongInt;°dONLNdYî6†`(ù6hPrint:°dONLNddî~†Æ)HTHPrint;°dONLNdn¢6Æx(´6 fLandscape:°dONLNd}¢~ÆÆ)HBoolean;°dONLNdá∞6ºZ(π6bXtra:°dONLNdë∞~º¿)H SignedByte;°dONLNdûæ6 N(«6END;
  4276. ˚*¯4¸*¯ ˝*˝˛
  4277. ˇ·ˇ‚7^
  4278. .°dONLNd£Ó*¸Y(¯*Routines
  4279. °dONLNd¨**"(Opening and Closing the Printing Manager
  4280. .°dONLNd’$*0ê*PROCEDURE PrOpen;°dONLNdÁ2*>ñ*PROCEDURE PrClose;
  4281. .°dONLNd˙P*\l*
  4282. Filling and V·‡°dONLNdPk\‹)Aerifying Print Records 
  4283. .°dONLNdc*oÆ(l*PROCEDURE PrintDefault°dONLNd6c‘o@)™(hPrint: THPrint);°dONLNdIq*}ú(z*FUNCTION PrValidate°dONLNd]q‘}v)™(hPrint: THPrint): Boolean;
  4284. .°dONLNdyè*õB(ò*5Displaying and Customizing the Printing Dialog Boxes 
  4285. .°dONLNdØ¢*Æ¢*FUNCTION PrStlDialog°dONLNdƒ¢‘Æv)™(hPrint: THPrint): Boolean;°dONLNd‡∞*º¢(π*FUNCTION PrJobDialog°dONLNdı∞‘ºv)™(hPrint: THPrint): Boolean;°dONLNdæ* ñ(«*FUNCTION PrDlgMain°dONLNd$æ‘ Ë)™.(hPrint: THPrint; pDlgInit: PDlgInitProcPtr): °dONLNdRÃ⁄ÿ
  4286. +Boolean;°dONLNd[⁄*Êñ(„*FUNCTION PrStlInit°dONLNdn⁄‘Êv)™(hPrint: THPrint): TPPrDlg;°dONLNdäË*Ùñ(Ò*FUNCTION PrJobInit°dONLNdùË‘Ùv)™(hPrint: THPrint): TPPrDlg;°dONLNdπˆ*¢(ˇ*PROCEDURE PrJobMerge°dONLNdŒˆ‘ )™)(hPrintSrc: THPrint; hPrintDst: THPrint);
  4287. .°dONLNd¯* S(*Printing
  4288. .°dONLNd'*3ñ*FUNCTION PrOpenDoc°dONLNd'‘3‚)™-(hPrint: THPrint; pPrPort: TPPrPort; pIOBuf: °dONLNdA5⁄A4+Ptr): TPPrPort;°dONLNdQC*O¢(L*PROCEDURE PrCloseDoc°dONLNdfC‘OL)™(pPrPort: TPPrPort);°dONLNd{Q*]¢(Z*PROCEDURE PrOpenPage°dONLNdêQ‘]ƒ)™((pPrPort: TPPrPort; pPageFrame: TPRect);°dONLNdπ_*k®(h*PROCEDURE PrClosePage°dONLNdœ_‘kL)™(pPrPort: TPPrPort);°dONLNd‰m*yú(v*PROCEDURE PrPicFile°dONLNd¯m‘y‹)™,(hPrint: THPrint;pPrPort: TPPrPort; pIOBuf: °dONLNd${⁄á‚+,Ptr; pDevBuf: Ptr; VAR prStatus: TPrStatus);
  4289. .°dONLNdQô*•ê(¢*Optimizing Printing
  4290. .°dONLNde¨*∏ú*PROCEDURE PrGeneral°dONLNdy¨‘∏")™
  4291. (pData: Ptr);ˇ¨@ˇ ˇˇˇˇ@
  4292. ˇ·ˇ‚7^
  4293. 4H\, Palatino
  4294. .+ä"CHAPTER €`)\1,     Helvetica
  4295.     (@äThe Printing Manager4⁄ä˙(‡äSummary
  4296. ~¿(‡1
  4297. ‡)-a¿)67
  4298. (ÔäDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H¿
  4299. °dONLNd\Hhî(eHError Handling,
  4300. Courier
  4301. .°dONLNdoH{‰*FUNCTION PrError: INTEGER;°dONLNd*}Hâ¿*PROCEDURE PrSetError°dONLNd?}ÚâR)™(iErr: INTEGER);
  4302. .°dONLNdPõHß≠(§HLow-Level Routines
  4303. .°dONLNdcÆH∫Δ*PROCEDURE PrDrvrOpen;°dONLNdyºH»Ã*PROCEDURE PrDrvrClose;°dONLNdê H÷Í*FUNCTION PrDrvrDCE: Handle;°dONLNd¨ÿH‰ˆ*FUNCTION PrDrvrVers: INTEGER;
  4304. .°dONLNd ˆH¬*Low-Level Control Calls
  4305. .°dONLNd‚    H∫*PROCEDURE PrCtlCall°dONLNdˆ    Ú)™.(iWhichCtl: INTEGER;lParam1: LONGINT;lParam2: °dONLNd$¯#ö+LONGINT; lParam3: LONGINT);
  4306. THZ4UHZ VHV
  4307. ˇ·ˇ‚7^
  4308. .°dONLNd@GHU¯(QHAssembly-Language Information
  4309. °dONLNd^jHvO*"Tû °dONLNd_jNv)&rap Macros Requiring Routine Selectors
  4310. °dONLNdÜ{Hál(ÑH_PrGlueˇ
  4311. ¿@ˇ ˇˇˇˇ@
  4312. ˇ·ˇ‚7^
  4313. 4*\˜, Palatino
  4314. .+l"CHAPTER €`)\1,     Helvetica
  4315.     (@lThe Printing Manager4⁄*˙¯
  4316. (‡*1 )-c)68
  4317.     )9Summary
  4318. *Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿¯
  4319.     °dONLNd\*gM(d*Selector°dONLNd    \§g≈)zRoutine
  4320. °dONLNdj*vY(s*    $C8000000,
  4321. Courier.°dONLNdj§v»)zPrOpen.°dONLNd"z*ÜY(É*    $D0000000.°dONLNd,z§ÜŒ)zPrClose.°dONLNd4ä*ñW(ì*    $20040480.°dONLNd>ä§ñÏ)z PrintDefault.°dONLNdKö*¶W(£*    $52040498.°dONLNdUö§¶‡)z
  4322. PrValidate.°dONLNd`™*∂Y(≥*    $2A040484.°dONLNdj™§∂Ê)z PrStlDialog.°dONLNdv∫*ΔW(√*    $32040488.°dONLNdÄ∫§ΔÊ)z PrJobDialog.°dONLNdå *÷Y(”*    $4A040894.°dONLNdñ §÷⁄)z    PrDlgMain.°dONLNd†⁄*Ê[(„*    $3C04040C.°dONLNd™⁄§Ê⁄)z    PrStlInit.°dONLNd¥Í*ˆW(Û*    $44040410.°dONLNdæÍ§ˆ⁄)z    PrJobInit.°dONLNd»˙*Y(*    $5804089C.°dONLNd“˙§‡)z
  4323. PrJobMerge.°dONLNd›
  4324. *Y(*    $04000C00.°dONLNdÁ
  4325. §⁄)z    PrOpenDoc.°dONLNdÒ*&W(#*    $08000484.°dONLNd˚§&‡)z
  4326. PrCloseDoc.°dONLNd**6W(3*    $10000808.°dONLNd*§6‡)z
  4327. PrOpenPage.°dONLNd:*FY(C*    $1800040C.°dONLNd%:§FÊ)z PrClosePage.°dONLNd1J*VW(S*    $60051480.°dONLNd;J§V⁄)z    PrPicFile.°dONLNdEZ*fZ(c*    $BA000000.°dONLNdOZ§fŒ)zPrError.°dONLNdWj*vY(s*    $C0000200.°dONLNdaj§v‡)z
  4328. PrSetError.°dONLNdlz*ÜW(É*    $70070480.°dONLNdvz§Ü⁄)z    PrGeneral.°dONLNdÄä*ñW(ì*    $94000000.°dONLNdää§ñ⁄)z    PrDrvrDCE.°dONLNdîö*¶Y(£*    $9A000000.°dONLNdûö§¶‡)z
  4329. PrDrvrVers.°dONLNd©™*∂W(≥*    $80000000.°dONLNd≥™§∂‡)z
  4330. PrDrvrOpen.°dONLNdæ∫*ΔW(√*    $88000000.°dONLNd»∫§ΔÊ)z PrDrvrClose.°dONLNd‘ *÷Z(”*    $A0000E00.°dONLNdfi §÷⁄)z    PrCtlCallˇ$:@ˇ ˇˇˇˇ@
  4331. ˇ·ˇ‚7^
  4332. 4⁄∫˙,     Helvetica
  4333. .ù†(‡IN-‡)
  4334. 1
  4335. (Ô∫Draft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^H°
  4336. vH†4vH† üHü
  4337. ˇ·ˇ‚7^
  4338. ˇˇÖ0ˇÆ°dONLNdZ∫sÚ(n∫Index4ßH¡&
  4339. ∂H¿&4∑H¿& ∑H∑&
  4340. ˇ·ˇ‚7^
  4341. °dONLNd¶H∂R(≤HB, Palatino
  4342.     °dONLNdøH»c*backgra°dONLNdøc»É)ound prÇİdONLNdøÉ»û) ocedur P°dONLNdøü»£)e°dONLNd Q”n(—Qwriting˙İdONLNd% t”í)#25 to 26
  4343. H &4H & H&
  4344. ˇ·ˇ‚7^
  4345. °dONLNd.ÒHS(˝HD
  4346.     °dONLNd0
  4347. H`*deferrë°dONLNd6
  4348. `å) ed printing>°dONLNdB
  4349. ìó)34°dONLNdDHÄ(Hdialog event fiz¿°dONLNdSÅí)9lters°dONLNdY Q)ó('QPrinting Manager‡°dONLNdj û)ß)M23°dONLNdm+H4[(2Hdiscr“°dONLNdr+[4l)ete r‡°dONLNdw+m4ë)    esolution–`°dONLNdÅ+ó4õ)*5°dONLNdÉ6H?|(=H
  4350. dots per inch܇°dONLNdë6Ç?Ü):5°dONLNdìAHJÇ(HHdraft printing, [ °dONLNd£AÉJè);See]¿°dONLNd¶AèJfi)  immediate printing°dONLNd∫LHUù(SHdraft-quality printing°dONLNd—L§U®)\4
  4351. ÉHç&4ÑHç& ÑHÑ&
  4352. ˇ·ˇ‚7^
  4353. °dONLNd”sHÉS(HH
  4354.     °dONLNd’åHïú*high-quality printingù†°dONLNdÎå¢ï¶)Z4
  4355. √HÕ&4ƒHÕ& ƒHƒ&
  4356. ˇ·ˇ‚7^
  4357. °dONLNdÌ≥H√L(øHI
  4358.     °dONLNdÔÃH’b*idle prô°dONLNdˆÃb’})ocedur#¿°dONLNd¸Ã~’Ç)es`°dONLNd˛Ãà’å)
  4359. 9°dONLNd◊Q‡`(fiQdefi¿‡°dONLNd◊`‡w)nitionQ °dONLNd ◊~‡ì)8 to 9°dONLNd‚HÎï(ÈHimmediate printing
  4360. H#&4H#& H&
  4361. ˇ·ˇ‚7^
  4362. °dONLNd%    HP*,J
  4363.     °dONLNd'"H+∂*job dialog box (for printing)D¿°dONLNdE"Ω+¡)u7°dONLNdG-H6h(4Hjob subr\–°dONLNdO-h6x) ecor˘‡°dONLNdS-x6})d
  4364. dHn&4eHn& eHe&
  4365. ˇ·ˇ‚7^
  4366. °dONLNdUTHdR(`HP
  4367.     °dONLNdWmHva*page r^°dONLNd]mavÅ)ectangleI0°dONLNdfmàvå)'4°dONLNdhxHÅd(Hpaper rTê°dONLNdoxeÅÖ)ectangle>–°dONLNdxxåÅê)'4,
  4368. Courier.°dONLNdzÇHçk(äHPrClose.°dONLNdÅÉkåv)# prç°dONLNdÑÉvåë) ocedur¿°dONLNdäÉíåñ)eg`°dONLNdåÉúå•)
  4369. 40.°dONLNdèçHòz(ïH
  4370. PrCloseDoc.°dONLNdôézóÖ)2 prç°dONLNdúéÖó†) ocedur¿°dONLNd¢é°ó•)eg`°dONLNd§é´ó¥)
  4371. 48.°dONLNdßòH£(†H PrClosePage.°dONLNd≤ô¢ä)7 prç°dONLNdµô䢕) ocedur¿°dONLNdªô¶¢™)eg`°dONLNdΩô∞¢π)
  4372. 49.°dONLNd¿£HÆu(´H    PrCtlCall.°dONLNd…§u≠Ä)- prç°dONLNdçÄ≠õ) ocedur¿°dONLNd“§ú≠†)e.°dONLNd‘ÆQπÉ(∂Q
  4373. iPrBitsCtl.°dONLNdfiØÉ∏ô)2 contr9°dONLNd‰Øö∏≈) ol constantî°dONLNdØÀ∏‘)1584ß8¡.°dONLNdÛ•A∞n(≠A    iPrDevCtl.°dONLNd¸¶nØÑ)- contr9°dONLNd¶ÖØ∞) ol constantî°dONLNd¶∂Øø)160.°dONLNd∞Aªn(∏A    iPrEvtCtl.°dONLNd±n∫Ñ)- contr9°dONLNd ±Ö∫∞) ol constantî°dONLNd,±∂∫ø)159.°dONLNd/ªAΔi(√AiPrIOCtl.°dONLNd7ºi≈)( contr9°dONLNd=ºÄ≈´) ol constantî°dONLNdIº±≈∫)159.°dONLNdLΔ8—e(Œ8    PrDlgMain.°dONLNdU«e–à)-     function°dONLNd_«è–ò)*44.°dONLNdb—8‹o(Ÿ8 PrDrvrClose.°dONLNdm“o€z)7 prç°dONLNdp“z€ï) ocedur¿°dONLNdv“ñ€ö)eg`°dONLNdx“†€©)
  4374. 57.°dONLNd{‹8Áe(‰8    PrDrvrDCE.°dONLNdÑ›eÊà)-     function°dONLNdé›èÊò)*57.°dONLNdëÁ8Új(Ô8
  4375. PrDrvrOpen.°dONLNdõËjÒu)2 prç°dONLNdûËuÒê) ocedur¿°dONLNd§ËëÒï)eg`°dONLNd¶ËõÒ§)
  4376. 56.°dONLNd©Ú8˝j(˙8
  4377. PrDrvrVers.°dONLNd≥Ûj¸ç)2     function°dONLNdΩÛî¸ù)*58.°dONLNd¿˝8[(8PrError.°dONLNd«˛[~)#     function°dONLNd—˛Öé)*54.°dONLNd‘8e(8    PrGeneral.°dONLNd›    ep)- prç°dONLNd‡    pã) ocedur¿°dONLNdÊ    åê)eg`°dONLNdË    ñü)
  4378. 51.°dONLNdÎAx(A DraftBitsOp.°dONLNdˆxó)7 opcode °dONLNd˛ù¶)%53.°dONLNdA)n(&A    GetRotnOp.°dONLNd
  4379. n(ç)- opcode °dONLNdì(ú)%53.°dONLNd)A4}(1A GetRslDataOp.°dONLNd!*}3ú)< opcode °dONLNd)*¢3´)%51.°dONLNd,4A?Ç(<A
  4380. NoDraftBitsOp.°dONLNd95Ç>°)A opcode °dONLNdA5ß>∞)%53.°dONLNdD?AJi(GASetRslOp.°dONLNdL@iIà)( opcode °dONLNdT@éIó)%52°dONLNdWK8TQ(R8print rÁ°dONLNd^KQTa)ecorÑ °dONLNdbKbTg)dİdONLNddKnTr) 7°dONLNdfVA_a(]Ajob subr\–°dONLNdnVa_q) ecor˘‡°dONLNdrVq_v)dy@°dONLNdtV}_Å) 8°dONLNdvaAj¢(hAprinter information subr∂∞°dONLNdéa¢j≤)aecorS¿°dONLNdía≥j∏)d” °dONLNdîaæj¬) 8.°dONLNdñk8vt(s8 PrintDefault.°dONLNd¢ltu)< prç°dONLNd•luö) ocedur¿°dONLNd´lõuü)eg`°dONLNd≠l•uÆ)
  4381. 42°dONLNd∞w8Än(~8printer driverˇ °dONLNdøwtÄx)<3°dONLNd¡Ç8ãY(â8    printer rƒ–°dONLNd ÇYão)!esour° °dONLNdœÇoã)ce fi°@°dONLNd‘ÇãÖ)leè`°dONLNd◊Çåãê)
  4382. 3°dONLNdŸç8ñ{(î8printing grafPortD†°dONLNdÎçÇñÜ)J6°dONLNdÌò8°~(ü8Printing Manager°dONLNd˛£A¨y+     job dialog box∞@°dONLNd
  4383. £¨É)>7°dONLNdÆA∑(µAstyle dialog box`İdONLNd ÆÜ∑ä)E7.°dONLNd"∏8√o(¿8 PrJobDialog.°dONLNd-πo¬í)7     function°dONLNd7πô¬¢)*43.°dONLNd:√8Œe(À8    PrJobInit.°dONLNdCƒeÕà)-     function°dONLNdMƒèÕò)*45.°dONLNdPŒ8Ÿj(÷8
  4384. PrJobMerge.°dONLNdZœjÿu)2 prç°dONLNd]œuÿê) ocedur¿°dONLNdcœëÿï)eg`°dONLNdeœõÿ§)
  4385. 46.°dONLNdhŸ8‰V(·8PrOpen.°dONLNdn⁄V„a) prç°dONLNdq⁄a„|) ocedur¿°dONLNdw⁄}„Å)eg`°dONLNdy⁄á„ê)
  4386. 40.°dONLNd|‰8Ôe(Ï8    PrOpenDoc.°dONLNdÖÂeÓà)-     function°dONLNdèÂèÓò)*47.°dONLNdíÔ8˙j(˜8
  4387. PrOpenPage.°dONLNdúj˘u)2 prç°dONLNdüu˘ê) ocedur¿°dONLNd•ë˘ï)eg`°dONLNdßõ˘§)
  4388. 48.°dONLNd™˙8e(8    PrPicFile.°dONLNd≥˚ep)- prç°dONLNd∂˚pã) ocedur¿°dONLNdº˚åê)eg`°dONLNdæ˚ñü)
  4389. 50.°dONLNd¡8j(
  4390. 8
  4391. PrSetError.°dONLNdÀju)2 prç°dONLNdŒuê) ocedur¿°dONLNd‘ëï)eg`°dONLNd÷õ§)
  4392. 56.°dONLNdŸ8o(8 PrStlDialog.°dONLNd‰oí)7     function°dONLNdÓô¢)*43.°dONLNdÒ8&e(#8    PrStlInit.°dONLNd˙e%à)-     function°dONLNdè%ò)*45.°dONLNd&81j(.8
  4393. PrValidate.°dONLNd'j0ç)2     function°dONLNd'î0ù)*41
  4394. ^8h4_8h _8_
  4395. ˇ·ˇ‚7^
  4396. °dONLNdN8^C(Z8R
  4397.     °dONLNd g8p;*r°dONLNd!g;pâ)esolution of devices∫p°dONLNd6gêpî)U5
  4398. û8®4ü8® ü8ü
  4399. ˇ·ˇ‚7^
  4400. °dONLNd8é8ûB(ö8S
  4401.     °dONLNd:ß8∞U*spool fi›@°dONLNdBßU∞[)leÀ`°dONLNdEßb∞f)
  4402. 4°dONLNdG≤8ªr(π8spool printing J@°dONLNdV≤sª);SeeL‡°dONLNdY≤ªô)  deferrù°dONLNd`≤ôª≈) ed printingK–°dONLNdl≤ê–)34ˇ
  4403. Ó@ˇ ˇˇˇˇ@
  4404. ˇ·ˇ‚7^
  4405. 4*I˜, Palatino
  4406. .+ú"INDEX4⁄*˙¯,     Helvetica
  4407. (‡*IN-”@)
  4408. 2
  4409. +eDraft. PreliminaryVP):, Confi)dential. ©1991 ˘Å)0Apple ComputerÒ)7, Inc. Ìë)1/9/924^*¿
  4410.     °dONLNd]*fü(d*style dialog box (for printing)ı°dONLNd ]•f©){7
  4411. î*û4ï*û ï*ï
  4412. ˇ·ˇ‚7^
  4413. °dONLNd"Ñ*î3(ê*T,
  4414. Courier
  4415.     .°dONLNd$ú*ßa* TDftBitsBlk.°dONLNd/ùa¶à)7
  4416.  data type@°dONLNd:ùè¶ò).38.°dONLNd=ß*≤a(Ø* TGetRotnBlk.°dONLNdH®a±à)7
  4417.  data type@°dONLNdS®è±ò).38.°dONLNdV≤*Ω\(∫*
  4418. TGetRslBlk.°dONLNd`≥\ºÉ)2
  4419.  data type@°dONLNdk≥äºì).35.°dONLNdnΩ*»R(≈*TGnlData.°dONLNdvæR«y)(
  4420.  data type@°dONLNdſīâ).35°dONLNdÑ…3“5(–3.¿°dONLNdÖ…5“S)    See also .@†°dONLNdé»T”Å)    PrGeneral.@†°dONLNdó…Å“å)- prNê°dONLNdö…å“ß) ocedurÿ`°dONLNd†…ß“´)e(°dONLNd¢…≤“ª) 35.°dONLNd•”*fiH(€*TPrDlg.°dONLNd´‘H›o)
  4421.  data type@°dONLNd∂‘v›).39.°dONLNdπfi*ÈM(Ê*TPrInfo.°dONLNd¿flMËt)#
  4422.  data type@°dONLNdÀfl{ËÑ).31.°dONLNdŒÈ*ÙH(Ò*TPrint.°dONLNd‘ÍHÛo)
  4423.  data type@°dONLNdflÍvÛ).30°dONLNd‚ı3˛5(¸3.¿°dONLNd„ı5˛Q)See also†°dONLNdÎıR˛m) print rß∞°dONLNdÛım˛})ecorD¿°dONLNd˜ı~˛É)d.°dONLNd˘ˇ*
  4424. H(*TPrJob.°dONLNdˇH    o)
  4425.  data type@°dONLNd
  4426. v    ).31°dONLNd
  4427.  35(3.¿°dONLNd 5Q)See also†°dONLNd Rt)     job subrp°dONLNd tÑ)"ecor∫İdONLNd# Ñâ)d.°dONLNd%* W(*    TPrStatus.°dONLNd.W~)-
  4428.  data type@°dONLNd9Öé).33.°dONLNd< *+H((*TPrStl.°dONLNdB!H*o)
  4429.  data type@°dONLNdM!v*).33.°dONLNdP+*6\(3*
  4430. TSetRslBlk.°dONLNdZ,\5É)2
  4431.  data type@°dONLNde,ä5ì).37
  4432. c*m4d*m d*d
  4433. ˇ·ˇ‚7^
  4434. °dONLNdhS*c4(_*V
  4435.     °dONLNdjl*uO*
  4436. variable rP°dONLNdtlPut)&    esolutionê°dONLNd~l{u)+54^¿˜ˇ